与pyspark不同,spark-submit会抛出错误

时间:2015-09-03 10:02:14

标签: apache-spark pyspark

我一直在使用Ipython笔记本测试脚本并将pyspark传递给它。我想要完成的一切运作良好。

我还使用pyspark从命令行运行它而没有笔记本。

使用版本1.3.1

使用spark-submit

将其作为工作提交时
spark-submit --master local[*] myscript.py

我收到以下错误:

x_map = rdd.map(lambda s: (s[1][1],s[1][3])).distinct().toDF().toPandas()

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

我的脚本的开头如下所示:

from pyspark import SparkContext
sc = SparkContext(appName="Whatever")

from pyspark.sql.types import *
from pyspark.sql import Row
import statsmodels.api as sm
import pandas as pd
import numpy as np
import sys
[..] other python modules

rdd = sc.textFile(input_file)
rdd = rdd.map(lambda line: (line.split(",")[1],[x for x in line.split(",")])).sortByKey()

x_map = rdd.map(lambda s: (s[1][1],s[1][3])).distinct().toDF().toPandas()

1 个答案:

答案 0 :(得分:5)

您可以在此链接中阅读:http://spark.apache.org/docs/1.3.1/api/python/pyspark.sql.html

  

创建时,SQLContext将一个名为toDF的方法添加到RDD,可用于将RDD转换为DataFrame,它是SQLContext.createDataFrame()的缩写

因此,为了在RDD中使用toDF方法,您需要创建一个sqlContext并使用SparkContext对其进行初始化:

from pyspark.sql import SQLContext
...
sqlContext = SQLContext(sc)