Подтвердить что ты не робот

Объект PipelinedRDD не имеет атрибута 'toDF' в PySpark

Я пытаюсь загрузить SVM файл и преобразовать его в DataFrame, чтобы я мог использовать модуль ML (Pipeline ML) от Spark. Я только что установил свежий Spark 1.5.0 на Ubuntu 14.04 (без spark-env.sh).

Мой my_script.py:

from pyspark.mllib.util import MLUtils
from pyspark import SparkContext

sc = SparkContext("local", "Teste Original")
data = MLUtils.loadLibSVMFile(sc, "/home/svm_capture").toDF()

и я использую: ./spark-submit my_script.py

И я получаю сообщение об ошибке:

Traceback (most recent call last):
File "/home/fred-spark/spark-1.5.0-bin-hadoop2.6/pipeline_teste_original.py", line 34, in <module>
data = MLUtils.loadLibSVMFile(sc, "/home/fred-spark/svm_capture").toDF()
AttributeError: 'PipelinedRDD' object has no attribute 'toDF'

Я не могу понять, что если я запустил:

data = MLUtils.loadLibSVMFile(sc, "/home/svm_capture").toDF()

непосредственно внутри оболочки PySpark, она работает.

4b9b3361

Ответ 1

toDF метод - это патч обезьяны выполнен внутри конструктора SparkSession (SQLContext конструктор в 1.x), чтобы иметь возможность для его использования сначала необходимо создать SQLContext (или SparkSession):

# SQLContext or HiveContext in Spark 1.x
from pyspark.sql import SparkSession
from pyspark import SparkContext

sc = SparkContext()

rdd = sc.parallelize([("a", 1)])
hasattr(rdd, "toDF")
## False

spark = SparkSession(sc)
hasattr(rdd, "toDF")
## True

rdd.toDF().show()
## +---+---+
## | _1| _2|
## +---+---+
## |  a|  1|
## +---+---+

Не говоря уже о необходимости использовать SQLContext для работы с DataFrames.