python - Spark MapPartitions

标签 python apache-spark pyspark

我正在使用 Spark 的 python api。
我有一个大文本,我用 rdd = sc.loadtxt("file.txt") 加载。
之后,我想对rdd进行mapPartitions转换。
但是,我只能使用 python 迭代器访问每个分区中文本文件的每一行。
这不是我喜欢的数据使用方式,它会影响我的应用程序性能。

是否有其他方法可以访问每个分区上的该文本文件?
例如:获取它就像一个真正的 txt 文件,1 个字符串,其中行由\n .. 分隔

最佳答案

对于初学者,您可以使用 glom 方法,该方法将每个分区中的所有元素合并到一个列表中:

rdd = sc.parallelize(range(50), 5).map(str)
glomed = rdd.glom()

这意味着您将获得一个仅包含单个元素的生成器。接下来你可以简单地加入行:

def do_something(iter):
    s = "\n".join(next(iter))  # For Python 2 use iter.next()
    # ... do something with s
    return ...

glomed.mapPartitions(do_something)

更简单的方法是省略 glom 并简单地连接行:

rdd.mapPartitions(lambda iter: ["\n".join(iter)]).first()
"0\n1\n2\n3\n4\n5\n6\n7\n8\n9'

注意:

一般情况下应该没有这个必要。大多数 Python 模块与生成器一起工作得很好,并且绝对没有性能损失。此外,文本文件的分区内容几乎完全取决于集群设置,而不是数据本身。可以说它不是特别有用。

关于python - Spark MapPartitions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292308/

相关文章:

python - 我怎样才能执行第二个功能?

hadoop - Apache Spark:无法构建:[错误]服务器访问错误..jetty

python - 如何使用 Apache Spark Dataframes 执行 Switch 语句 (Python)

scala - 我们不能在 map 函数中使用 sparkContext 吗?

apache-spark - 我可以获取 Spark 读取的文件的元数据吗

python - Pyspark - 具有重置条件的累积和

python - 如何编写符合 PEP8 的超长字符串并防止 E501

python - 帮助python继承

python - 无法正确发布请求

dataframe - 如何制作良好的可重现 Apache Spark 示例