簡體   English   中英

在 PySpark 中加入和相乘 RDD

[英]Join and multiply RDDs in PySpark

我有兩個要按鍵相乘的 RDD。 這可以通過合並兩個 RDD 並將元素相乘或通過將 RDD 相乘而不合並它們來完成。

假設我有這兩個 RDD:

rdd1 = [("dog", 2), ("ox", 4), ("cat", 1)]
rdd2 = [("dog", 9), ("ox", 2), ("cat", 2)]

我想要的是:

multiplied_rdd = [("dog", 18), ("ox", 8), ("cat", 2)]

我嘗試合並兩個 RDD,然后將數字相乘,但出現錯誤:

merged_rdd = rdd1.join(rdd2)
Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.

如果我設法獲得合並的 RDD,我會這樣做:

multiplied = merged_rdd.map(lambda x: (x[0], x[1][0]*x[1][1])

所以,我的問題是如何通過加入或通過外部 rdd1 和 rdd2 相乘來實現“multiplied_rdd”RDD?

不知道你是如何初始化 RDD(你有兩個rdd1 ),但這應該可以工作:

from pyspark.sql import SparkSession

rdd1 = [("dog", 2), ("ox", 4), ("cat", 1)]
rdd2 = [("dog", 9), ("ox", 2), ("cat", 2)]

spark = SparkSession.builder.getOrCreate()
sc = spark.sparkContext
x = sc.parallelize(rdd1)
y = sc.parallelize(rdd2)
merged_rdd = x.join(y)
multiplied = merged_rdd.map(lambda x: (x[0], x[1][0] * x[1][1]))

print(multiplied.collect())
# [('ox', 8), ('dog', 18), ('cat', 2)]                                            

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM