在单个 pySpark 数据框中合并列表
Merging lists in a single pySpark dataframe
我正在阅读 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
但我想不出办法。
我已经遍历了列表,我可以在每次迭代后追加这两列。
但是我发现很难找到一种方法来创建数据框并逐步填充它。
这是我的代码:
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()
但它 returns 我这个:
+----+----+
|name|size|
+----+----+
+----+----+
有一种简单的方法可以使用 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)
我正在阅读 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
但我想不出办法。
我已经遍历了列表,我可以在每次迭代后追加这两列。 但是我发现很难找到一种方法来创建数据框并逐步填充它。
这是我的代码:
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()
但它 returns 我这个:
+----+----+
|name|size|
+----+----+
+----+----+
有一种简单的方法可以使用 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)