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

时间:2017-12-05 08:44:47

标签: pyspark apache-spark-2.0

我是Python(pyspark)的新编程。     我有一个txt文件,其中消息需要在}{分割。这是以{...}{...}...开头的消息。我想把它们分成

{...}
{...}
{...}

很少有像

这样的内心消息
{...
    {...}
...
}

CODE:
我正在尝试下面的代码,我收到错误说

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 个答案:

答案 0 :(得分:1)

后:

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

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

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

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