Pyspark:AttributeError:'PipelinedRDD'对象没有属性'_get_object_id'

时间:2018-10-19 20:15:16

标签: python hive pyspark

我正在尝试在文件中查找特定的字符串,然后将其替换为另一个特定的字符串。我正在使用齐柏林飞艇笔记本。 到目前为止,这是我的代码。

%pyspark
import fileinput
import sys
from pyspark import SparkContext

sc = SparkContext.getOrCreate()
hivectx = HiveContext(sc)
file = sc.textFile('PATH/my_query.sql')
file1 = sc.textFile('PATH/my_query1sql')
phrase = "(Month|| '-' || '5' || '-' || year)"
replace ="('5' || '/' || month || '/' || year)"

read = file.collect()


//for i in read:
     //print i     ---> this successfully prints out my_query.sql file  


for i in read:
    file1 = file1.map(lambda x: x.replace(phrase, replace))
    file1.saveAsTextFile(file1)   // im trying to save it as the empty file "PATH/my_query.sql" also known as file1.

但是,我收到此错误:

AttributeError: 'PipelinedRDD' object has no attribute '_get_object_id' 

我无法在线找到有关带有'_get_object_id'的此错误的任何文档。类似错误指出其版本问题?

是这种情况吗?我的代码中是否存在明显错误?对不起,该语言:p

1 个答案:

答案 0 :(得分:0)

如果要替换文件中的特定文本模式,可以在不使用Spark的情况下尝试以下操作,对于像SQL查询这样的小文件,它可能会更有效。

with open('PATH/file.sql','r') as f:
    lines = f.readlines()

phrase = "(Month|| '-' || '5' || '-' || year)"
replace ="('5' || '/' || month || '/' || year)"

new_lines = ''.join([i.replace(phrase,replace) for i in lines])

print(new_lines)

with open('text.sql', 'w') as f:
    f.write(new_lines)

将读取文件并将其存储在此处的列表中,然后将replace函数应用于文件的所有行并将其加入。最后,编写您要另存为的文件。