我有一堆組合鍵和值的形式。例如,如何通過火花中的多個鍵組合?
tfile.collect() = [(('id1','pd1','t1'),5.0),
(('id2','pd2','t2'),6.0),
(('id1','pd1','t2'),7.5),
(('id1','pd1','t3'),8.1) ]
我想在此集合,在那裏我可以聚集基於ID [1..1]或PD [1..1]的信息執行SQL一樣操作。我想實現使用vanilla pyspark apis而不是使用SQLContext。 在我目前的實現中,我從一堆文件中讀取併合並RDD。
def readfile():
fr = range(6,23)
tfile = sc.union([sc.textFile(basepath+str(f)+".txt")
.map(lambda view: set_feature(view,f))
.reduceByKey(lambda a, b: a+b)
for f in fr])
return tfile
我打算創建一個聚合數組作爲一個值。例如,
agg_tfile = [((id1,pd1),[5.0,7.5,8.1])]
其中5.0,7.5,8.1表示[t1,t2,t3]。我目前,通過使用字典的香草python代碼實現相同。它適用於較小的數據集。但我擔心,因爲這可能無法擴展到更大的數據集。有沒有一種有效的方式使用pispark apis來實現同樣的效果?
而不是使用' union',因爲'wholeTextFiles'調用加載所有文件更高效(如果它存在於PySpark中)。 – 2015-04-09 11:51:03
這是一個Scala [聚合減少多(http://dmtolpeko.com/2015/02/12/multi-column-key-and-value-reduce-a-tuple-in-spark/)和一個Python [聯合減少多個值]( http://stackoverflow.com/questions/30895033/spark-use-reducebykey-instead-of-groupbykey-and-mapbyvalues) – ecoe 2015-11-24 13:38:01