Pyspark Jupyter - 在 java 代码与 python 代码中创建的数据框
Pyspark Jupyter - dataframe created in java code vs python code
我在 java 中有一个 class 可以构建一些复杂的 Spark DataFrame。
package companyX;
class DFBuilder {
public DataFrame build() {
...
return dataframe;
}
}
我将此 class 添加到 pyspark/jupiter class 路径,以便它可以被 py4j 调用。
现在,当我调用它时,我得到了奇怪的类型:
b = sc._jvm.companyX.DFBuilder()
print(type(b.build()))
#prints: py4j.java_gateway.JavaObject
VS
print(type(sc.parallelize([]).toDF()))
#prints: pyspark.sql.dataframe.DataFrame
有没有办法将此 JavaObject 转换为正确的 pyspark 数据帧?
我遇到的问题之一是,当我想在 java 中构建的 DataFrame 上调用 df.show() 时,它会打印在火花日志中,而不是在笔记本单元中。
您可以使用 DataFrame
初始值设定项:
from pyspark.sql import DataFrame, SparkSession
spark = SparkSession.builder.getOrCreate()
DataFrame(b.build(), spark)
如果您使用过时的 Spark 版本,请将 SparkSession
实例替换为 SQLContext
。
引用
从 spark 2.4 开始,在 python 中包装 scala 数据帧时,您仍然应该使用 SQLContext
而不是 SparkSession
。
一些相关的 pyspark
session
代码:
self._wrapped = SQLContext(self._sc, self, self._jwrapped)
...
# in methods returning DataFrame
return DataFrame(jdf, self._wrapped)
如果 SparkSession
获得通过,某些方法如 toPandas()
将无法使用 DataFrame
。
我在 java 中有一个 class 可以构建一些复杂的 Spark DataFrame。
package companyX;
class DFBuilder {
public DataFrame build() {
...
return dataframe;
}
}
我将此 class 添加到 pyspark/jupiter class 路径,以便它可以被 py4j 调用。 现在,当我调用它时,我得到了奇怪的类型:
b = sc._jvm.companyX.DFBuilder()
print(type(b.build()))
#prints: py4j.java_gateway.JavaObject
VS
print(type(sc.parallelize([]).toDF()))
#prints: pyspark.sql.dataframe.DataFrame
有没有办法将此 JavaObject 转换为正确的 pyspark 数据帧? 我遇到的问题之一是,当我想在 java 中构建的 DataFrame 上调用 df.show() 时,它会打印在火花日志中,而不是在笔记本单元中。
您可以使用 DataFrame
初始值设定项:
from pyspark.sql import DataFrame, SparkSession
spark = SparkSession.builder.getOrCreate()
DataFrame(b.build(), spark)
如果您使用过时的 Spark 版本,请将 SparkSession
实例替换为 SQLContext
。
引用
从 spark 2.4 开始,在 python 中包装 scala 数据帧时,您仍然应该使用 SQLContext
而不是 SparkSession
。
一些相关的 pyspark
session
代码:
self._wrapped = SQLContext(self._sc, self, self._jwrapped)
...
# in methods returning DataFrame
return DataFrame(jdf, self._wrapped)
如果 SparkSession
获得通过,某些方法如 toPandas()
将无法使用 DataFrame
。