我有一個如下所示的 RDD,其中元組中的第一個條目是作者,第二個條目是出版物的標題。
[('Hector Garcia-Molina', 'Distributed Databases.'),
('Meichun Hsu', 'Distributed Databases.'),
('Won Kim', 'On Resolving Schematic Heterogeneity in Multidatabase Systems.'),
('Won Kim',
'Requirements for a Performance Benchmark for Object-Oriented Database Systems.')]
我想將每個作者的出版物標題連接在一起。示例輸出將是:
[('Hector Garcia-Molina', 'Distributed Databases.'),
('Meichun Hsu', 'Distributed Databases.'),
('Won Kim', 'On Resolving Schematic Heterogeneity in Multidatabase Systems.''Requirements for a Performance Benchmark for Object-Oriented Database Systems.')]
鑒于這是一個 RDD,我該怎么做?我已經看到了如何使用資料框執行此操作的解決方案,但沒有使用 RDD。
這是我嘗試過的,但我懷疑問題是我如何使用reduceByKey. Pyspark SQL 函式collect_list適用于資料幀,但不幸的是我需要將此資料保存為 RDD。
title_author.map(lambda r: [(r[0],r[1]) for r[1] in r]).reduceByKey(add)
uj5u.com熱心網友回復:
試試這個作為替代方案。
def listToString(s):
# initialize an empty string str1 = ele
str1 = ""
cnt = 0
# traverse in the string
for ele in s:
if cnt == 0:
str1 = "\'" ele "\'"
else:
str1 = "," "\'" ele "\'"
cnt = 1
# return string
return str1
rdd = sc.sparkContext.parallelize (
[('Hector Garcia-Molina', 'Distributed Databases.'),
('Meichun Hsu', 'Distributed Databases.'),
('Won Kim', 'On Resolving Schematic Heterogeneity in Multidatabase Systems.'),
('Won Kim',
'Requirements for a Performance Benchmark for Object-Oriented Database Systems.')] )
rdd2 = rdd.groupByKey().mapValues(sorted)
rdd2.take(5)
rdd3 = rdd2.map(lambda x: (x[0], listToString(x[1])))
rdd3.take(5)
你也可以這樣做:
rdd4 = rdd2.reduceByKey(_ _)
rdd4.take(5)
試著看看什么是最接近的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/457313.html
