我正在尝试将多个数据帧从scala传递并转换为pyspark。当我为一个数据帧尝试它时,我可以使用.show()读取输出,但是对于多个数据帧,我无法拆分数据帧,因此无法转换
我试图通过从scala spark传递到pyspark来打印一个数据帧。它甚至可以将其转换为熊猫,它的工作原理非常完美。当我通过传递两个数据框进行相同操作时,我无法拆分数据框。我收到的数据类型为“ py4j.java_gateway.JavaMember”,如果我可以拆分它们,则该对象中有两个数据框,我将能够像处理一个scala数据框一样转换pyspark数据框
这是scala代码
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)都转换为pyspark数据帧,分别为df1和df2。
现在我正在获取无法处理的对象py4j.java_gateway.JavaMember。
当我返回一个数据框时,我得到相同的数据类型,但是我能够将其转换为pyspark数据框,当我尝试返回两个数据框时,我无法得到我需要的东西
答案 0 :(得分:1)
您返回的对象是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)