我正试图将一个intID
和一个3 int的数组转换为一个有2列的数据帧,然后与pyspark中的另一个数据帧并集;
然而,我只是收到了一个又一个与模式相关的错误,似乎什么都不起作用。我不知道为什么会这样。
emp_rdd = spark.sparkContext.emptyRDD()
schema = StructType([
StructField("id", IntegerType(), True),
StructField("data", ArrayType(IntegerType()), True),])
df = spark.createDataFrame(data=emp_rdd, schema=schema)
columns = ['id','data']
for i in range(10):
data = [id, data1]
newRows = spark.createDataFrame(data,columns)
df= df.union(newRows)
这给了我这个错误;
无法推断类型的架构:<类"int">
如有任何帮助,将不胜感激
出现此错误的原因是,在for循环中,您将参数data
作为简单列表传递,而spark.createDataFrame
需要列表或元组的可迭代性。
尝试将其更改为:
data = [(id, data1)]
示例:
for i in range(5):
data = [(i, [i + 1, i + 2, i + 3])]
newRows = spark.createDataFrame(data, columns)
df = df.union(newRows)
df.show()
#+---+---------+
#| id| data|
#+---+---------+
#| 0|[1, 2, 3]|
#| 1|[2, 3, 4]|
#| 2|[3, 4, 5]|
#| 3|[4, 5, 6]|
#| 4|[5, 6, 7]|
#+---+---------+