将 Spark DataFrame 从 Python 移动到 Scala whithn Zeppelin

Moving Spark DataFrame from Python to Scala whithn Zeppelin

我在 Zeppelin 的 Python 段落中创建了一个 spark DataFrame。

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

df是一个pandas数据框

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

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

z.put("spDf", spDf)

我得到了这个错误:

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

有什么修复错误的建议吗?或者有什么移动的建议 spDf?

您可以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]

不过临时注册比较好table:

%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]

反方向转换见