Поскольку вы используете RDD[str]
, вы должны либо указать соответствующий тип.Для атомарного значения это либо соответствующий AtomicType
from pyspark.sql.types import StringType, StructField, StructType
rdd = sc.parallelize(["hello world"])
spark.createDataFrame(rdd, StringType())
, либо описание его строки:
spark.createDataFrame(rdd, "string")
Если вы хотите использовать StructType
конвертирование данных в tuples
сначала:
schema = StructType([StructField("text", StringType(), True)])
spark.createDataFrame(rdd.map(lambda x: (x, )), schema)
Конечно, если вы собираетесь просто конвертировать каждую партию в DataFrame
, имеет гораздо больше смысла использовать структурированную потоковую передачу полностью:
lines = (spark
.readStream
.format("socket")
.option("host", "localhost")
.option("port", 9999)
.load())