2016-05-16 16 views
3

Ich habe in Zeppelin einen Spark DataFrame in einem Python-Absatz erstellt.Verschieben von Spark DataFrame von Python nach Scala whithn Zeppelin

sqlCtx = SQLContext(sc) 
spDf = sqlCtx.createDataFrame(df) 

und df ist ein Pandas Datenrahmen

print(type(df)) 
<class 'pandas.core.frame.DataFrame'> 

, was ich tun möchte, ist spDf von einem Python Absatz an einem anderen Scala Absatz zu bewegen. Es sieht ein vernünftiger Weg zu verwenden ist z.put.

z.put("spDf", spDf) 

und ich habe diesen Fehler:

AttributeError: 'DataFrame' object has no attribute '_get_object_id' 

jeden Vorschlag, den Fehler zu beheben? oder irgendeinen Vorschlag, um spDf zu verschieben?

Antwort

5

Sie können put interne Java-Objekt nicht ein Python-Wrapper:

%pyspark 

df = sc.parallelize([(1, "foo"), (2, "bar")]).toDF(["k", "v"]) 
z.put("df", df._jdf) 

und dann stellen Sie sicher, dass Sie richtigen Typ verwenden:

val df = z.get("df").asInstanceOf[org.apache.spark.sql.DataFrame] 
// df: org.apache.spark.sql.DataFrame = [k: bigint, v: string] 

aber es ist besser temporäre Tabelle registrieren:

%pyspark 

# registerTempTable in Spark 1.x 
df.createTempView("df") 

und SQLContext.table verwenden, um es zu lesen:

// sqlContext.table in Spark 1.x 
val df = spark.table("df") 
df: org.apache.spark.sql.DataFrame = [k: bigint, v: string] 

in der entgegengesetzten Richtung konvertieren Zeppelin: Scala Dataframe to python

+1

Dank sehen! Es funktioniert perfekt. – MTT

Verwandte Themen