在Scala中将数据帧转换为RDD[Map]

在Scala中将数据帧转换为RDD[Map],scala,apache-spark,Scala,Apache Spark,我要转换创建的数组,如下所示: case class Student(name: String, age: Int) val dataFrame: DataFrame = sql.createDataFrame(sql.sparkContext.parallelize(List(Student("Torcuato", 27), Student("Rosalinda", 34)))) 当我从数据帧收集结果时,得到的数组是一个数组[org.apache.spark.sql.Row]=数组([Tor

我要转换创建的数组,如下所示:

case class Student(name: String, age: Int)
val dataFrame: DataFrame = sql.createDataFrame(sql.sparkContext.parallelize(List(Student("Torcuato", 27), Student("Rosalinda", 34))))
当我从数据帧收集结果时,得到的数组是一个
数组[org.apache.spark.sql.Row]=数组([Torcuato,27],[Rosalida,34])

我正在研究如何在RDD[Map]中转换数据帧,例如:

Map("name" -> nameOFFirst, "age" -> ageOfFirst)
Map("name" -> nameOFsecond, "age" -> ageOfsecond)

我试图通过:
x.\u 1
使用map,但这似乎不适用于
数组[spark.sql.row]
如何执行转换?

您可以使用带有模式匹配的map函数来执行此项工作

import org.apache.spark.sql.Row

dataFrame
  .map { case Row(name, age) => Map("name" -> name, "age" -> age) }

这将导致
RDD[Map[String,Any]]

您可以使用带有模式匹配的Map函数在此处执行此任务

import org.apache.spark.sql.Row

dataFrame
  .map { case Row(name, age) => Map("name" -> name, "age" -> age) }

这将导致
RDD[Map[String,Any]]

换句话说,您可以将数据帧的行转换为Map,下面的工作正常

def dfToMapOfRdd(df:DataFrame):RDD[Map[String,Any]={
val结果:RDD[Map[String,Any]]=df.RDD.Map(行=>{
row.getValuesMap[Any](row.schema.fieldNames)
})
结果
}

参考文献:

换句话说,您可以将数据帧的行转换为映射,下面的工作正常

def dfToMapOfRdd(df:DataFrame):RDD[Map[String,Any]={
val结果:RDD[Map[String,Any]]=df.RDD.Map(行=>{
row.getValuesMap[Any](row.schema.fieldNames)
})
结果
}

参考文献:

外部映射没有键值结构?上下文是我想使用spark jobserver,但在作业结果的序列化方面存在一些问题。显然,只有字符串键/值的映射才有效。返回的结果将是几个spark查询的聚合。因此,外部映射将包含更多的键。这是一个非常糟糕的问题,标题有误导性,做法不好,描述质量不高。当你在这里发布问题时,你需要处理这些东西外部映射没有键值结构?上下文是我想使用spark jobserver,但是在作业结果的序列化方面有一些问题。显然,只有字符串键/值的映射才有效。返回的结果将是几个spark查询的聚合。因此,外部映射将包含更多的键。这是一个非常糟糕的问题,标题有误导性,做法不好,描述质量不高。当您在此处发布问题时,您需要处理这些问题不适用于我我正在获取scala。线程“main”java.lang.ClassNotFoundException:scala中的任何错误-->异常。线程“main”java.lang.ClassNotFoundException:scala.Any不适用于我我获取scala。线程“main”java.lang.ClassNotFoundException:scala中的任何错误-->异常。任何错误-->异常