如何使用 Pyspark 将一个 rdd 映射到另一个?

Posted

技术标签:

【中文标题】如何使用 Pyspark 将一个 rdd 映射到另一个?【英文标题】:How to Map one rdd to another with Pyspark? 【发布时间】:2018-03-19 15:49:31 【问题描述】:

我有rdd1labels(0,1,4) 和另一个rdd2 有文字。我想将rdd1rdd2 映射,这样rdd1row1rdd2row1 映射等等。

我试过了:

rdd2.join(rdd1.map(lambda x: (x[0], x[0:])))

它给了我错误:

RDD is empty.

有人可以在这里指导我吗? 示例输出:rdd1- labels & rdd2-Text

rdd1       rdd2

0   i hate painting i have white paint all over my hands.

0   Bawww I need a haircut  No1 could fit me in before work tonight. Sigh.

4   I had a great day

1   what is life.

4   He sings so good

1   i need to go to sleep  ....goodnight

Sample output

【问题讨论】:

0,1,4 在同一行吗? rdd2 的值是多少?你的预期输出是什么? rdd2 有文字。我想将预测标签从 rdd1 映射到 rdd2 对应地从 row1。不同的行有不同的标签。 0,1,4是三个类别 您能否通过提供示例 rdd2 和预期输出来进一步澄清一下? 以下是我正在寻找的输出: rdd1 rdd2 0 我讨厌绘画我的手上全是白漆 1 什么是生活? 0 我需要一部新手机.....我也要去睡觉了!明天尤威学校。 4 我度过了非常美好的一天 0 Blah,我想该睡觉了。早上看到我的朋友们回到俄亥俄州 1 我要睡觉了....晚安 @RahulAnand 你能edit你的问题并将示例输出作为格式化代码发布吗?很难解读为评论。 【参考方案1】:

如果你有rdd1作为

val rdd1 = sc.parallelize(List(0,0,4,1,4,1))

rdd2 一样

val rdd2 = sc.parallelize(List("i hate painting i have white paint all over my hands.",
  "Bawww I need a haircut  No1 could fit me in before work tonight. Sigh.",
  "I had a great day",
  "what is life.",
  "He sings so good",
  "i need to go to sleep  ....goodnight"))

我想将 rdd1 与 rdd2 映射,这样 rdd1 的第 1 行与 rdd2 的第 1 行映射,依此类推。

使用 zip 功能

一个简单的zip 函数应该可以满足你的要求

rdd1.zip(rdd2)

这会给你输出

(0,i hate painting i have white paint all over my hands.)
(0,Bawww I need a haircut  No1 could fit me in before work tonight. Sigh.)
(4,I had a great day)
(1,what is life.)
(4,He sings so good)
(1,i need to go to sleep  ....goodnight)

zipWithIndex 并加入

这种方法会得到与上面使用zip 解释的相同的输出(而且这种方法也很昂贵)

rdd1.zipWithIndex().map(_.swap).join(rdd2.zipWithIndex().map(_.swap)).map(_._2)

希望回答对你有帮助

【讨论】:

以上是关于如何使用 Pyspark 将一个 rdd 映射到另一个?的主要内容,如果未能解决你的问题,请参考以下文章

rdd 上的映射如何在 pyspark 中工作?

映射 dict(来自 rdd)以递归方式更改 Python/PySpark 中的列名

使用 pyspark 将 RDD 行转换为数据帧时出错

在 PySpark 中使用 rdd.map 解压和编码字符串

字符串中的 Pyspark 双字符替换避免某些单词而不映射到 pandas 或 rdd

如何使用pyspark将两列值组合到另一列?