mar*_*tin 6 python dataframe pyspark
我读过类似的问题,但是找不到我特定问题的解决方案。
我有一个清单
l = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
和一个DataFrame
df = sc.parallelize([
['p1', 'a'],
['p2', 'b'],
['p3', 'c'],
]).toDF(('product', 'name'))
Run Code Online (Sandbox Code Playgroud)
我想获得一个新的DataFrame,其中将列表l添加为另一列,即
+-------+----+---------+
|product|name| new_col |
+-------+----+---------+
| p1| a| 1 |
| p2| b| 2 |
| p3| c| 3 |
+-------+----+---------+
Run Code Online (Sandbox Code Playgroud)
与JOIN接触的方法,我当时在DF与
sc.parallelize([[1], [2], [3]])
Run Code Online (Sandbox Code Playgroud)
失败了。使用中的方法withColumn,如
new_df = df.withColumn('new_col', l)
Run Code Online (Sandbox Code Playgroud)
由于列表不是Column对象而失败。
因此,通过阅读此处的一些有趣的内容,我确定您实际上不能将随机/任意列附加到给定DataFrame对象。看来你想要的不仅仅是zipa join。我环顾四周,发现了这张票,这让我觉得你无法给予zip,因为你拥有DataFrame而不是RDD物体。
我能够解决您的问题的唯一方法是离开DataFrame对象世界并返回RDD对象。我还需要为连接目的创建一个索引,这可能适用于您的用例,也可能不适用于您的用例。
l = sc.parallelize([1, 2, 3])
index = sc.parallelize(range(0, l.count()))
z = index.zip(l)
rdd = sc.parallelize([['p1', 'a'], ['p2', 'b'], ['p3', 'c']])
rdd_index = index.zip(rdd)
# just in case!
assert(rdd.count() == l.count())
# perform an inner join on the index we generated above, then map it to look pretty.
new_rdd = rdd_index.join(z).map(lambda (x, y): [y[0][0], y[0][1], y[1]])
new_df = new_rdd.toDF(["product", 'name', 'new_col'])
Run Code Online (Sandbox Code Playgroud)
当我跑步时new_df.show(),我得到:
+-------+----+-------+
|product|name|new_col|
+-------+----+-------+
| p1| a| 1|
| p2| b| 2|
| p3| c| 3|
+-------+----+-------+
Run Code Online (Sandbox Code Playgroud)
旁注:我真的很惊讶这不起作用。看起来像外连接?
from pyspark.sql import Row
l = sc.parallelize([1, 2, 3])
new_row = Row("new_col_name")
l_as_df = l.map(new_row).toDF()
new_df = df.join(l_as_df)
Run Code Online (Sandbox Code Playgroud)
当我跑步时new_df.show(),我得到:
+-------+----+------------+
|product|name|new_col_name|
+-------+----+------------+
| p1| a| 1|
| p1| a| 2|
| p1| a| 3|
| p2| b| 1|
| p3| c| 1|
| p2| b| 2|
| p2| b| 3|
| p3| c| 2|
| p3| c| 3|
+-------+----+------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6904 次 |
| 最近记录: |