我正在浏览pySpark 1.6.2文档,以便将我的数据合并到一个数据帧中。
我有一个包含19个项目的列表(listname:sizes):
[9, 78, 13, 3, 57, 60, 66, 32, 24, 1, 2, 15, 2, 2, 76, 79, 100, 73, 4]
和包含19个不同长度子列表的2D列表(listname:data):
[[a,b,c],[d,e,f,g,h,i,j].......[x,y,z,a,f]]
我正在尝试创建一个如下所示的数据框:
name size
0 [a,b,c] 9
1 [d,e,f,g,h,i,j] 78
2 ........ ...
. ........ ...
. ........ ...
18 [x,y,z,a,f] 4
但我无法想办法做到这一点。
我已遍历列表,我可以在每次迭代后附加两列。 但我发现很难找到一种方法来创建一个Dataframe并逐步填充它。
这是我的代码:
schema = StructType([StructField("name", StringType(), True), StructField("size", IntegerType(), True)])
dataframe = sqlContext.createDataFrame([],schema)
for i in range(len(data)):
sizes.append(len(data[i]))
t = sqlContext.DataFrame([[data[i], sizes[i]]],
columns=['name', 'size'])
dataframe = dataframe.append(t, ignore_index=True)
dataframe.show()
但它让我回答:
+----+----+
|name|size|
+----+----+
+----+----+
答案 0 :(得分:1)
使用zip()函数可以轻松实现此目的。如果你这样做:
t = zip(data, sizes)
您将拥有一个元组列表,每对一个:
[(['a', 'b', 'c'], 9),
(['d', 'e', 'f', 'g', 'h', 'i', 'j'], 78),
...
(['x', 'y', 'z', 'a', 'f'], 4)]
现在您只需使用元组列表创建DataFrame:
dataframe = sqlContext.createDataFrame(t,schema)