繁体   English   中英

PySpark使用来自RDD的三列与元组和int制作数据框

[英]PySpark making dataframe with three columns from RDD with tuple and int

我有一种形式的RDD:

[(('1', '10'), 1), (('10', '1'), 1), (('1', '12'), 1), (('12', '1'), 1)]

我所做的是

df = spark.createDataFrame(rdd, ["src", "rp"])

我在其中创建了一个元组和 int 列,如下所示:

+-------+-----+
|    src|rp   |
+-------+-----+
|[1, 10]|    1|
|[10, 1]|    1|
|[1, 12]|    1|
|[12, 1]|    1|
+-------+-----+

但我不知道如何制作 [x,y] 中第一个元素的src列和第二个元素的dst列,所以我会有一个包含三列 src、dst 和 rp 的数据框:

+-------+-----+-----+
|    src|dst  |rp   |
+-------+-----+-----+
|      1|   10|    1|
|     10|    1|    1|
|      1|   12|    1|
|     12|    1|    1|
+-------+-----+-----+

您需要对 RDD 进行中间转换,使其成为包含三个元素的平面列表:

spark.createDataFrame(rdd.map(lambda l: [l[0][0], l[0][1], l[1]]), ["src", "dst", "rp"])
+---+---+---+
|src|dst| rp|
+---+---+---+
|  1| 10|  1|
| 10|  1|  1|
|  1| 12|  1|
| 12|  1|  1|
+---+---+---+

您可以在数据框上做一个简单的选择来分离列。 无需像其他答案所暗示的那样进行中间转换。

from pyspark.sql.functions import col    
df = sqlContext.createDataFrame(rdd, ["src", "rp"])
df = df.select(col("src._1").alias("src"), col("src._2").alias("dst"),col("rp"))
df.show()

这是结果

+---+---+---+
|src|dst| rp|
+---+---+---+
|  1| 10|  1|
| 10|  1|  1|
|  1| 12|  1|
| 12|  1|  1|
+---+---+---+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM