如何将PySpark管道rdd(元组内部的元组)转换为数据框架?

时间:2018-01-30 10:38:04

标签: python-3.x apache-spark pyspark apache-spark-sql pyspark-sql

我有一个像波纹管一样的PySpark管道RDD

(1,([1,2,3,4],[5,3,4,5])
(2,([1,2,4,5],[4,5,6,7])

我想生成如下数据框:

Id  sid  cid
1   1   5
1   2   3   
1   3   4
1   4   5
2   1   4
2   2   5
2   4   6
2   5   7

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

如果你有像这样的RDD,

rdd = sc.parallelize([
   (1, ([1,2,3,4], [5,3,4,5])),
   (2, ([1,2,4,5], [4,5,6,7]))
])

我只想使用RDD:

rdd.flatMap(lambda rec:
    ((rec[0], sid, cid) for sid, cid in zip(rec[1][0], rec[1][1]))
).toDF(["id", "sid", "cid"]).show()

# +---+---+---+
# | id|sid|cid|
# +---+---+---+
# |  1|  1|  5|
# |  1|  2|  3|
# |  1|  3|  4|
# |  1|  4|  5|
# |  2|  1|  4|
# |  2|  2|  5|
# |  2|  4|  6|
# |  2|  5|  7|
# +---+---+---+