【问题标题】:Difficulty with encoding while reading data in Spark在 Spark 中读取数据时编码困难
【发布时间】:2018-07-29 07:07:11
【问题描述】:

关于我之前的question,当我发出命令时,

filePath = sc.textFile("/user/cloudera/input/Hin*/datafile.txt")
filePath.collect()

数据的某些部分在每个单词前面都有'\xa0' 前缀,而数据的其他部分没有那个特殊字符。我附上了 2 张图片,一张带有“\xa0”,另一张没有“\xa0”。 2张图片内容属于同一个文件。 Spark 仅以这种方式读取同一文件中的部分数据。我检查了 HDFS 中存在的原始数据文件,它没有问题。

我觉得这与编码有关。我尝试了所有方法,例如在 flatMap 中使用replaceoption,例如flatMap(lambda line: line.replace(u'\xa0', ' ').split(" "))flatMap(lambda line: line.replace(u'\xa0', u' ').split(" ")),但没有一个对我有用。这个问题可能听起来很垃圾,但我是使用 Apache Spark 的新手,我需要一些帮助来克服这个问题。

谁能帮帮我?提前致谢。

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    检查文件的编码。当您使用sc.textFile 时,spark 需要一个 UTF-8 编码文件。 解决方案之一是使用sc.binaryFiles 获取您的文件,然后应用预期的编码。

    sc.binaryFile 创建一个 key/value rdd,其中 key 是文件的路径,value 是一个字节的内容。 如果您只需要保留文本并应用解码功能,:

    filePath = sc.binaryFile("/user/cloudera/input/Hin*/datafile.txt")
    filePath.map(lambda x :x[1].decode('utf-8')) #or another encoding depending on your file
    

    【讨论】:

    • 喜欢filePath = sc.binaryFiles("/user/cloudera/Hin*/datafile.txt")?那我应该在哪里应用编码方法呢?
    • 您能详细说明一下吗?
    • 我应该在哪里添加您的地图功能? filePath.flatMap(lambda line: line.split(" ")).filter(lambda w: w.lower() in words).map(lambda word: (word, 1)).reduceByKey(add) 我想搜索预定义的单词并计算它们的出现次数。这是我之前问题的link
    • @JohnDeer 你从解码功能开始,正如我写的那样。然后你应用你的计数。
    • 比如,前两行是你的代码,接下来是filePath.flatMap(lambda line: line.split(" ")).filter(lambda w: w.lower() in words).map(lambda word: (word, 1)).reduceByKey(add) 是第三行,最后是collect(),对吧?
    猜你喜欢
    • 2016-12-24
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多