Pyspark:文件文本拆分后无法打印

Posted

技术标签:

【中文标题】Pyspark:文件文本拆分后无法打印【英文标题】:Pyspark: not able to print after file text is split 【发布时间】:2017-12-05 08:44:47 【问题描述】:

我是使用 Python (pyspark) 进行火花编码的新手。 我有一个 txt 文件,其中的消息需要在 处拆分。也就是说,消息以 ......... 开头,就像这样。我想把这些分成

...
...
...

很少有像这样的内在信息

...
    ...
...

代码: 我正在尝试使用以下代码,但出现错误提示

Traceback (most recent call last):
  File "PythonBLEDataParser_work2.py", line 49, in <module>
    for line in words:
TypeError: 'PipelinedRDD' object is not iterable

(注意 - 我已经删除了几行注释,因此第 49 行是指words = contentRDD.map(lambda x: x.split(''))

        from pyspark.sql import SparkSession
        #importing re for removing space and others
        import re

        if __name__ == "__main__":

        spark = SparkSession\
                .builder\
                .appName("PythonBLEDataParser")\
                .getOrCreate()

        contentRDD = spark.sparkContext.textFile("BLE_data_Sample.txt")\

        #nonempty_lines = contentRDD.filter(lambda x: len(x) > 0)
        #print (nonempty_lines.collect())
        words = contentRDD.map(lambda x: x.split(''))
        for line in words:
            print (line)

        spark.stop

我尝试了pyspark: 'PipelinedRDD' object is not iterable 中提到的.map( lambda elem: list(elem)),但没有帮助。

【问题讨论】:

【参考方案1】:

之后:

words = contentRDD.map(lambda x: x.split(''))

您只对 contentRDD 进行了转换,而不是操作。这仍然是一个 PipelinedRDD 对象。

如果你想将它收集到驱动程序中,你需要一个像“收集”这样的动作,所以:

words = contentRDD.map(lambda x: x.split('')).collect()
for line in words:
    print (line)

【讨论】:

以上是关于Pyspark:文件文本拆分后无法打印的主要内容,如果未能解决你的问题,请参考以下文章

如何更改pyspark中的列元数据?

如何在 pyspark 管道中打印最佳模型参数

使用 pyspark 从 CSV 文件中拆分字段

带有点“。”的数据框的 pyspark 访问列

如何在pyspark中将GUID转换为整数

在 C# 中拆分文本文件无法正常工作