2017-05-16 86 views
-3

我想修改我的文件中使用pysparkHDFS獲取之後,然後我想將它保存在HDFS爲我寫了下面的代碼。「統一」對象有沒有屬性「saveAsTextFile」

代碼

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' 

我知道有一些問題,我的變量,但我不能夠解決它。

+3

**'line'是'unicode'串**。它沒有'saveAsTextFile'方法,這應該從錯誤消息中顯而易見。而是打開文件進行寫入,並在那裏寫入字符串。 –

回答

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) 
+0

非常感謝您的回覆 – animal