我有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功能在这里不是一个好主意,但还不知道任何替代选项。 什么是更好的方法?
感谢您的支持。