【问题标题】:Spark Scala: Convert Map into Row objectSpark Scala:将 Map 转换为 Row 对象
【发布时间】:2021-03-08 08:32:56
【问题描述】:

我想将 Scala 映射转换为 Row 对象(基本上 Row(**dict) 在 python 中所做的我必须在 Scala spark 中实现它)。

输入:地图(com.project.name -> “A”,com.project.age -> 23)
输出:行(com.project.name="A", com.project.age = 23)

请帮忙。

【问题讨论】:

  • @Dipali_Deshmukh 你想要它作为数据框还是作为行?还想在此处尝试使用此行吗?
  • Row 对象,如果我们不能这样做,那么我们可以将其转换为数据框,然后从该数据框中我们得到 Row 对象吗?行应根据要求最终返回,
  • 您可以在下面查看我的回答是否对您有帮助或接近您所寻找的内容
  • 你能检查我的答案吗?

标签: scala dataframe apache-spark row


【解决方案1】:

您可以按如下方式将地图转换为数据框:

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)))

现在,如果您想从 Dataframe 中获取 Row,您可以按如下方式获取:

val row = df.first

如果您想查看列的名称,您可以按如下方式获得:

val columns = df.columns

【讨论】:

  • 您好,非常感谢您的回复,但我希望输出为 -> Row(com.project.name="A", com.project.age = 23)。
  • 如果你想要你正在寻找的东西。你可以利用 Map 来达到这个目的,因为 Map 本身就是键值对的集合。地图类似于字典
【解决方案2】:

你可以使用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)]

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多