Я хочу загрузить некоторые примеры данных, и, поскольку они содержат поле, являющееся массивом, я не могу просто сохранить их как CSV и загрузить файл CSV.
from pyspark.sql.types import *
sample_data = [["prasad, jones",120,"M",[170,50],"brown","1999-10-15T19:50:23+00:00",34,0.1],
["maurice, khan",82,"M",[130,30],"blond","1988-02-01T19:50:23+00:00",67,0.32]]
customSchema = StructType([
StructField("name", StringType(), True),
StructField("income", IntegerType(), True),
StructField("gender", StringType(), True),
StructField("height_weight", ArrayType(
StructType([
StructField("height", IntegerType(), True),
StructField("weight", IntegerType(), True)
]))),
StructField("hair-color", StringType(), True),
StructField("dateofbirth", TimestampType(), True),
StructField("factorX", DoubleType(), True),
StructField("factorY", DoubleType(), True)
])
# Try #1
df1 = spark.createDataFrame(sample_data,schema=customSchema)
# Try #2
df2 = spark.createDataFrame(spark.sparkContext.parallelize(sample_data),schema=customSchema)
Я пытался просто создать фрейм данных или распараллелить его перед загрузкой, как было предложено в других похожих вопросах / ответах, но я получаю следующую ошибку:
TypeError: element in array field height_weight: StructType can not accept object 130 in type <class 'int'>
Чего мне не хватает? Или как проще загрузить эти данные? Я пробовал текстовый файл с разделителями табуляции, но spark.read.format('txt')
не работал, и я не нашел никакой информации о том, как это сделать.