如何在 Python 中解压缩 RDD 中每个项目的值(列表)?

Posted

技术标签:

【中文标题】如何在 Python 中解压缩 RDD 中每个项目的值(列表)?【英文标题】:How to unpack the value (a list) of every item in a RDD in Python? 【发布时间】:2015-12-13 16:59:14 【问题描述】:

我有一个 RDD,每个项目都具有以下形式

(key, [ele1, ele2, ele3, ..., elen])

每个项目都是一个键值对,值是一个元素列表。

我想解压列表,这样我就可以创建一个新的 RDD,其中每个项目都包含一个元素,如下所示:

(key, ele1)
(key, ele2)
(key, ele3)
.
.
.
(key, ele4)

如何在 PySpark 中做到这一点?

我试过了

RDD.flatmap(lambda line: line[1]) 

但这不起作用。

【问题讨论】:

【参考方案1】:

比如这个?为了简单起见,我使用了str 元素。

>>> rdd = sc.parallelize([('key', ['ele1', 'ele2'])])
>>> rdd.flatMap(lambda data: [(data[0], x) for x in data[1]]).collect()
[('key', 'ele1'), ('key', 'ele2')]

【讨论】:

谢谢。我试过这个,但它不起作用。它抛出一个错误“AttributeError:'PipelinedRDD'对象没有属性'flatmap'” @zero323 因为您将我的答案编辑为 rdd 特定的,您能解决这个问题吗?谢谢。 这是一个错字 - flatmap != flatMap

以上是关于如何在 Python 中解压缩 RDD 中每个项目的值(列表)?的主要内容,如果未能解决你的问题,请参考以下文章

从 RDD 中的元组中解包项目时出现 Spark 错误

如何在 Python3 中解压缩使用 PKZIP 以外的算法加密的文件?

如果使用struct.pack(fmt,v1,v2,...)在python打包,如何在cpp中解压缩数字

使用 pathlib 模块从 rglob() 方法的输出中解压缩所有项目 [关闭]

在应用函数中解压缩的值太多(python 2)

在 Python 中解压缩 .bz2 文件