2016-11-17 24 views
2

在Spark SQL中,我正在使用Python,我正在嘗試在下面的sql的輸出RDD上工作。這是一個推文列表。我需要拆分單詞和提取@但使用的地圖,並試圖用空格我收到下述異常消息屬性錯誤:在火花上分割使用lambda的sql python

words.tw = sqlContext.sql("SELECT text FROM tweet where text like '%@%'") 
tweetrdd = tw.rdd.map(lambda line: line.split(" ")) 
tweetrdd.collect() 


ERROR executor.Executor: Exception in task 0.0 in stage 84.0 (TID 310) 
org.apache.spark.api.python.PythonException: Traceback (most recent call last): 
    File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/worker.py", line 111, in main 
    process() 
    File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/worker.py", line 106, in process 
    serializer.dump_stream(func(split_index, iterator), outfile) 
    File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 263, in dump_stream 
    vs = list(itertools.islice(iterator, batch)) 
    File "<stdin>", line 1, in <lambda> 
    File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/types.py", line 1272, in __getattr__ 
    raise AttributeError(item) 
**AttributeError: split** 
+0

例如將是有益的 – mtoto

回答

0

分裂,當你從一個數據幀它給RDD [行] RDD時,因此你不能分割在行上,你需要做的是從行中提取字符串,然後執行你的分割。

你可以做這樣的事情:

words.tw = sqlContext.sql("SELECT text FROM tweet where text like '%@%'") 
tweetrdd = tw.rdd.map(lambda line: line.text.split(" ")) 
tweetrdd.collect() 

P.S:我是一個Scala的傢伙,因此,語法可以是錯誤的。但是你可以瞭解我正在嘗試做什麼。您的數據和預期輸出的

+0

是讓與的getString感,但同樣的問題無法識別也:( –

+0

能否請您粘貼錯誤堆棧跟蹤!除此之外,其存在上述」 –

0
words.tw = sqlContext.sql("SELECT text FROM tweet where text like '%@%'").rdd.map(list)  
tweetrdd = tw.rdd.map(lambda line: line[0].split(" "))  
tweetrdd.collect() 
+0

您能否向代碼添加解釋:) –

+0

歡迎使用Stack Overflow!雖然這段代碼可能會回答這個問題,但爲什麼和/或代碼如何回答這個問題提供了額外的背景,這提高了它的長期價值。不鼓勵使用僅有代碼的答案。 – Ajean