Scala 如何将多个Spark数据帧转换为数据集[映射[字符串,数组]]?

Scala 如何将多个Spark数据帧转换为数据集[映射[字符串,数组]]?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我需要获取一个Map[String,DataFrame]并将其转换为一个Dataset[Map[String,Array]] val map\u of_df=map( “df1”->sc.parallelize(1到4).map(i=>(i,i*1000)).toDF(“id”,“x”).repartition(4) ,df2“->sc.parallelize(1到4).map(i=>(i,i*100)).toDF(“id”,“y”).repartition(4) ) //map of_df:s

我需要获取一个Map[String,DataFrame]并将其转换为一个Dataset[Map[String,Array]]

val map\u of_df=map(
“df1”->sc.parallelize(1到4).map(i=>(i,i*1000)).toDF(“id”,“x”).repartition(4)
,df2“->sc.parallelize(1到4).map(i=>(i,i*100)).toDF(“id”,“y”).repartition(4)
)
//map of_df:scala.collection.immutable.map[String,org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]=map(df1->[id:int,x:int],df2->[id:int,y:int])
//这里很神奇,我需要一种类型的org.apache.spark.sql.Dataset[Map[String,Array[org.apache.spark.sql.Row]]和四个分区
//其中地图的键为“df1”和“df2”

您只需
收集
所有数据帧:

map_of_df
      .mapValues(_.collect())
      .toSeq
      .toDS

请记住,这不会缩放-所有数据都将加载到驱动程序内存中。换句话说,您不需要Spark来完成此操作。

这不提供所需的类型谢谢您的想法!我使用Spark的原因是数据量很大。可伸缩性是这个特定问题的一个要求。我认为这不可行,为什么要这样做?我想在Scala空间的单个mapPartitions函数中对df1和df2的分区1执行一些操作。我认为仔细分区是可能的,将拼花地板文件名拉入驱动程序内存(如@shay_uu;所述),并使用直接从hdfs读取文件的方式将文件片段加载到mapPartitions中。然而,我觉得这很脆弱。我希望斯卡拉神中的一个会有一些更优雅的东西