Skip to main content
 首页 » 编程设计

python之属性错误 :split on spark sql python using lambda

2024年08月21日29Leo_wl

在 Spark SQL 中,我使用的是 Python,我正在尝试处理以下 sql 的输出 RDD。这是一个推文列表。我需要拆分单词并提取 @ 但是当使用 map 并尝试按空格拆分时,我收到下面提到的异常消息

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** 

请您参考如下方法:

当您从 DataFrame 获取 rdd 时,它会给出 RDD[Row] 因此您不能拆分行,您需要做的是从行中提取字符串,然后执行拆分。

你可以这样做:

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 专家,因此语法可能有误。但是您可以了解我正在尝试做什么。