无法将int+数组(int)的列表转换为pyspark数据帧



我正试图将一个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]|
#+---+---------+

相关内容

  • 没有找到相关文章