'PipelinedRDD'对象在PySpark中没有属性'toDF'
我正在尝试加载SVM文件并将其转换为A,DataFrame
以便可以使用Pipeline
Spark中的ML模块(ML)。我刚刚在Ubuntu
14.04(未spark-env.sh
配置)上安装了新的Spark 1.5.0 。
我的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外壳内,它可以工作。
-
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
或SparkSession
与之合作DataFrames
。