spark-submit 抛出错误,不像 pyspark

spark-submit throws errors, unlike 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()

如您所见,link:http://spark.apache.org/docs/1.3.1/api/python/pyspark.sql.html

When created, SQLContext adds a method called toDF to RDD, which could be used to convert an RDD into a DataFrame, it’s a shorthand for SQLContext.createDataFrame()

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

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