'PipelinedRDD'对象在PySpark中没有属性'toDF'

发布于 2021-01-29 15:21:23

我正在尝试加载SVM文件并将其转换为A,DataFrame以便可以使用PipelineSpark中的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外壳内,它可以工作。

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    toDF方法是SparkSessionSQLContext1.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|
    ## +---+---+
    

    更不用说您首先需要一个SQLContextSparkSession与之合作DataFrames



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看