PySpark:如何将另一列添加到dataFrame?

时间:2017-10-18 12:44:30

标签: pyspark pyspark-sql

我正在处理一个包含两个主题列的数据框, id colA

+---+-----+
|id |colA |
+---+-----+
| 1 |  5  |
| 2 |  9  |
| 3 |  3  |
| 4 |  1  |
+---+-----+

我需要将该dataFrame合并到另一列 colB 。我知道 colB 完全适合dataFrame的末尾,我只需要一些方法将它们加在一起。

+-----+
|colB |
+-----+
|  8  |
|  7  | 
|  0  | 
|  6  |
+-----+

在这些结果中,我需要获得如下所示的新数据框:

+---+-----+-----+
|id |colA |colB |
+---+-----+-----+
| 1 |  5  | 8   |
| 2 |  9  | 7   |
| 3 |  3  | 0   |
| 4 |  1  | 6   |
+---+-----+-----+

这是获取第一个DataFrame的pyspark代码:

l=[(1,5),(2,9), (3,3), (4,1)]
names=["id","colA"]
db=sqlContext.createDataFrame(l,names)
db.show()

我该怎么办?有人可以帮帮我吗?感谢

1 个答案:

答案 0 :(得分:0)

我做完了!我通过添加一个带有行索引的临时列来解决它,然后我将其删除。

代码:

from pyspark.sql import Row
from pyspark.sql.window import Window
from pyspark.sql.functions import rowNumber
w = Window().orderBy()

l=[(1,5),(2,9), (3,3), (4,1)]
names=["id","colA"]
db=sqlContext.createDataFrame(l,names)
db.show()

l=[5,9,3,1]
rdd = sc.parallelize(l).map(lambda x: Row(x))
test_df = rdd.toDF()
test_df2 =  test_df.selectExpr("_1 as colB")
dbB = test_df2.select("colB")

db= db.withColum("columnindex", rowNumber().over(w))
dbB = dbB.withColum("columnindex", rowNumber().over(w))


testdf_out = db.join(dbB, db.columnindex == dbB.columnindex. 'inner').drop(db.columnindex).drop(dbB.columnindex)
testdf_out.show()