2016-05-16 37 views
3

我在Zeppelin的Python段落中创建了一个Spark DataFrame。将Spark DataFrame从Python移动到Scala中Zeppelin

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

df是大熊猫数据框

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

我想要做的是从一个Python的段落到另一个段落斯卡拉移动spDf。看起来合理的方法是使用z.put

z.put("spDf", spDf) 

,我得到这个错误:

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

任何建议,修正这个错误?或任何建议移动spDf?

回答

5

您可以put内部Java对象不是一个Python包装:

%pyspark 

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

,然后确保你使用正确的类型:

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

但最好是注册临时表:

%pyspark 

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

并使用SQLContext.table来读取它:

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

向相反的方向转化见Zeppelin: Scala Dataframe to python

+1

谢谢!它完美的作品。 – MTT

相关问题