Estoy tratando de cargar un SVM archivo y convertirlo a un DataFrame para que yo pueda usar el ML módulo (Pipeline ML) de Chispa.
Me acaba de instalar un nuevo Spark 1.5.0 en Ubuntu 14.04 (no spark-env.sh configurado).

Mi my_script.py es:

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

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

y me estoy utilizando: ./spark-submit my_script.py

Y me sale el error:

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'

Lo que no puedo entender es que si ejecuto:

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

directamente dentro de PySpark shell, funciona.

1 Comentario

  1. 87

    toDF método es un mono parche ejecuta dentro de SparkSession (SQLContext constructor en 1.x) constructor por lo que para poder usarlo tienes que crear un SQLContext (o SparkSession) primero:

    # 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|
    ## +---+---+

    Por no hablar de que usted necesita un SQLContext para trabajar con DataFrames de todos modos.

Dejar respuesta

Please enter your comment!
Please enter your name here