python - 在 Scala Spark 和 PySpark 之间传递多个 DataFrame
问题描述
我正在尝试将多个数据帧从 scala 传递和转换为 pyspark。当我为一个数据帧尝试它时,我可以使用 .show() 读取输出,但对于多个数据帧,我无法拆分数据帧,因此无法转换
我试图通过从 scala spark 传递到 pyspark 来打印一个数据帧。它工作得很好,我什至可以将它转换为熊猫。当我通过传递两个数据帧来做同样的事情时,我无法拆分数据帧。我以“py4j.java_gateway.JavaMember”类型接收数据,如果我可以拆分它们,此对象中有两个数据帧,我将能够像使用一个 scala 数据帧一样转换 pyspark 数据帧
这是斯卡拉代码
import org.apache.spark.SparkContext
import org.apache.spark.sql.{SparkSession, DataFrame}
object scala_py{
def getInputDF:(DataFrame,DataFrame)={
val spark = SparkSession.builder.getOrCreate()
import spark.implicits._
val SourceTableDataframe = spark.sql("select * from <table name>")
val data=spark.sql("SELECT * FROM <table name>")
return (SourceTableDataframe,data)
}}
这是 pyspark 代码:
from pyspark import StorageLevel, SparkFiles
from pyspark.sql import SparkSession, DataFrame, SQLContext
from pyspark.sql.types import *
from pyspark.sql.functions import udf
spark = SparkSession \
.builder \
.appName("PySpark using Scala example") \
.getOrCreate()
sqlContext = spark._wrapped
sc = spark._sc
scala_out=sc._jvm.com.accenture.asset.scala_py
df1,df2=scala_out.getInputDF()
df=DataFrame(df1,sqlContext)
我希望将我的 scala 数据帧(SourceTableDataframe,data)都作为 df1 和 df2 转换为 pyspark 数据帧。
现在我得到了我无法处理的对象 py4j.java_gateway.JavaMember。
当我返回一个数据帧时,我得到了相同的数据类型,但我能够将其转换为 pyspark 数据帧,当我尝试返回两个时,我无法得到我需要的
解决方案
您返回的对象是 a scala.Tuple2
,相当于:
dfs = sc._jvm.scala.Tuple2(spark._jsparkSession.range(1), spark._jsparkSession.range(2))
它没有 py4j 映射。因此,您必须手动处理它
df1, df2 = DataFrame(dfs._1(), sqlContext), DataFrame(dfs._2(), sqlContext)
推荐阅读
- sql-server - TVP 不返回记录集
- typescript - 打字稿:将某些属性标记为可选
- python - 光子在太阳中的随机行走
- scala - 如何将方法的返回值作为输入传递给其他方法
- sql-server - Azure 逻辑应用,SQL 获取具有日期时间比较的行
- arrays - 如何将 ANYARRAY 函数的空数组值转换为 ANYARRAY?
- javascript - 有没有一种简单的方法可以在远程 graphql 模式上移动字段?
- python - 使用 pandas 合并 excel 文件并添加自定义列会出错
- crystal-reports - Crystal Reports 公式 - 用文本替换 Null 值
- java - 如何在 Grails 2.3.11 中安装 Apache POI