【问题标题】:How to create a DataSet from RDD using Case Class with composed columns如何使用具有组合列的案例类从 RDD 创建数据集
【发布时间】:2021-04-30 08:16:35
【问题描述】:

大家好,我使用 Spark/Scala 2.4.4 并且有一个带有 Persons 的 RDD[Map(String, String)]...行是这样的:

rdd = Map(
(FirstName -> "Michael")
(SecondName -> "Jackson")
)

我创建了一个这样的案例类:

case class Person(FirstName: String, SecondName: String) {
    val FullName = FirstName + SecondName
}

如何将此 RDD 转换为 Dataset[Person],并且可以在实例化类或需要使用列运行时生成 FullName 列?

谢谢!

【问题讨论】:

    标签: scala apache-spark dataset rdd


    【解决方案1】:

    您需要将地图展开为两列并将行转换为Person

    val rdd = sc.parallelize(Seq(Map(
        ("FirstName" -> "Michael"),
        ("SecondName" -> "Jackson")
    )))
    
    val df = rdd.toDF("person").select("person.FirstName", "person.SecondName").as[Person]
    

    那么就可以使用map获取FullName,例如:

    df.map(r => r.FullName).show
    +--------------+
    |         value|
    +--------------+
    |MichaelJackson|
    +--------------+
    

    【讨论】:

    • 感谢您的帮助,但我可以将 FullName 映射为一列,而不是在我需要的所有时间都映射吗?或者只是如果我让 df.withColumn("FullName", concat_ws("FirstName","SecondName"))?
    • 是的,我认为使用 withColumn 和 Spark SQL 函数比依赖类方法要好。
    • 谢谢,我担心 withColumn 的性能,但我认为这不是我最好的选择呵呵
    猜你喜欢
    • 2019-11-08
    • 1970-01-01
    • 2016-09-27
    • 2020-01-05
    • 1970-01-01
    • 2019-07-14
    • 2023-02-14
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多