【问题标题】:'unicode' object has no attribute 'saveAsTextFile'“unicode”对象没有属性“saveAsTextFile”
【发布时间】:2017-05-16 10:36:27
【问题描述】:

我正在尝试使用 pysparkHDFS 获取文件后修改我的文件,然后我想将其保存在 HDFS 中,因为我在下面的代码中编写了该文件。 p>

代码

import subprocess
from subprocess import Popen, PIPE
from pyspark import SparkContext
cat = sc.textFile("/user/root/parsed.txt")
hrk = "@"
for line in cat.collect():
   if (code == "ID"):
      line =line.strip() + "|"+hrk   
      line.saveAsTextFile("/user/root/testsprk")
      print(line) 

但是当我运行代码时,我遇到了错误。

错误:

Traceback (most recent call last):                                              
  File "<stdin>", line 30, in <module>
AttributeError: 'unicode' object has no attribute 'saveAsTextFile'

我知道我的 line 变量存在一些问题,但我无法修复它。

【问题讨论】:

  • line 是一个unicode 字符串。它没有 saveAsTextFile 方法,这从错误消息中应该很明显。而是打开文件进行写入并在那里写入字符串。

标签: python hadoop apache-spark pyspark rdd


【解决方案1】:

因为你在收集所有数据,所以收集的不是RDD,而是普通的列表和行只是一个字符串。

您不应收集有关驱动程序的所有数据。而是使用RDD.map,然后使用RDD.saveAsTextFile

def add_hrk_on_id(line):
    if (code == "ID"):
        return line.strip() + "|"+hrk   
    else
        return line

cat.map(add_hrk_on_id).saveAsTextFile(path)

【讨论】:

  • 非常感谢您的回复
猜你喜欢
  • 2013-12-28
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 2016-01-05
相关资源
最近更新 更多