2015-09-25 134 views
28

我想加載一個SVM文件並將其轉換爲DataFrame,因此我可以使用Spark的ML模塊(Pipeline ML)。 我剛在Ubuntu 14.04上安裝了新的Spark 1.5.0(沒有配置spark-env.sh)。'PipelinedRDD'對象在PySpark中沒有屬性'toDF'

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 shell中,它的工作原理。

回答

55

toDF方法是猴子補丁executed inside SparkSession (SQLContext constructor in 1.x) constructor所以能夠使用它,你必須創建一個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工作。

相關問題