我想将Scala映射转换为Row对象(基本上就像Row(**dict(在python中所做的那样,我必须在Scala spark中实现它(。
输入:映射(com.project.name->"A&",com.project.age->23(
输出:行(com.project.name="A&;,com.project_age=23(
请帮忙。
您可以使用Row.fromSeq
:
val m = Map("com.project.name" -> "A", "com.project.age" -> "23")
val row = Row.fromSeq(m.toSeq)
或者可替换地Row(m.toSeq:_*)
均给出[(com.project.name,A),(com.project.age,23)]
您可以将映射转换为数据帧,如下所示:
import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._
val input : Map[String,String] = Map("com.project.name" -> "A", "com.project.age" -> "23")
val df = input.tail
.foldLeft(Seq(input.head._2).toDF(input.head._1))((acc,curr) =>
acc.withColumn(curr._1,lit(curr._2)))
现在,如果你想从数据帧中获得行,你可以得到如下:
val row = df.first
如果你想查看列的名称,你可以得到如下:
val columns = df.columns