将带有数组的RDD转换为数据帧

时间:2016-07-18 18:26:27

标签: apache-spark dataframe pyspark

我的RDD如下所示。我试图将其转换为python(pyspark)中的[' TS',' val',' Key']的数据框。任何帮助都值得赞赏,因为我很新。

root
 |-- val: array (nullable = true)
 |    |-- element: double (containsNull = true)
 |-- key: long (nullable = true)

+--------------------+---+
|                 val|key|
+--------------------+---+
|[1.466095512E9, 6...|  0|
|[1.466097304E9, 6...|  1|
|[1.466099099E9, 6...|  2|
|[1.466100895E9, 7...|  3|
|[1.466102698E9, 7...|  4|

我试过这个,但我在.toDF行上收到了错误,没有任何解释。

FN2 = FN.map(lambda x, y: (x[0], x[1], y))
Square = FN2.toDF(['TS','val','key']) #Converts to dataframe
Square.show()

2 个答案:

答案 0 :(得分:0)

您的lambda函数包含错误,请尝试

FN2 = FN.map(lambda (x, y): (x[0], x[1], y))

通常,每一行都作为单个参数传递给map,所以最安全的方法是使用像

之类的东西进行映射
FN2 = FN.map(lambda row: (row[0], row[1]))

答案 1 :(得分:0)

我明白了。它是数组中的一个数组

FN2 = FN.map(lambda x: (x[0][0], x[0][1], x[1]))
Square = FN2.toDF(['TS','val','key']) 
Square.show()