Spark - 将键值对转换为列

时间:2018-04-09 09:02:49

标签: apache-spark pivot transform

我有100,000个文件,每个文件包含M个项目的数据,每个项目都有N个属性,每个文件的格式如下:

itemID,key,value    
item1_1,key1,value1
item1_1,key2,value2
...
item1_1,keyN,valueN
item1_2,key1,value1
...
item1_2,keyN,valueN
...
item1_M,keyN,valueN 

(第一个文件包含item1_1到item1_M的项目数据。第二个文件包含item2_1到item2_M的项目数据,......)

为了进一步处理,我想将数据转换为DataFrame,如:

item1_2,v1,v2,...,vN
...
item1000000_M,v1,v2,...,vN

我试图通过使用Spark的支点实现这一目标:

val df = spark.read.csv("/path/*")
df.groupBy("itemID").pivot("key",Seq("key1","key2",...,"keyN")).agg(first("value"))

对于10GB的压缩数据,需要数小时才能完成。我相信使用pivot功能在这里不是一个好主意,但还不知道任何替代选项。 什么是更好的方法?

感谢您的支持。

0 个答案:

没有答案