【问题标题】:Generate dynamic header using Scala case class for Spark Table使用 Scala 案例类为 Spark Table 生成动态标题
【发布时间】:2020-12-13 07:45:10
【问题描述】:
我有一个包含许多字段的现有案例类 案例类输出{ 用户ID:字符串, 时间戳:字符串, ... } 我正在使用它为这样的火花作业生成标题。 -------------------- 用户名 |时间戳| -------------------- 1 2324444444 2 2334445556 现在我想在其中添加更多列,这些列将来自
map(attributeName, attributeValue) 作为attributeNames。所以我的问题
是如何将地图添加到案例类,然后如何使用地图键作为
列值来生成动态列。在此之后我的最终输出
应该像 -------------------------------------------------- -- 用户名 |时间戳|属性名1 |属性名称2 -------------------------------------------------- -- 1 2324444444| | 2 2334445554| |

【问题讨论】:

标签: scala apache-spark schema case-class


【解决方案1】:

你可以这样做

 case class output {
       userId : String, 
       timeStamp: String,
       keyvalues: Map, 
       ...
    }
    import spark.implicits._
    import org.apache.spark.sql.functions._

    val df = spark.read.textFile(inputlocation).as[output]
    val keysDF = df.select(explode(map_keys($"keyvalues"))).distinct()
    val keys = keysDF.collect().map(f=>f.get(0)).map(f=>col("keyvalues").getItem(f).as(f.toString))
    df.select(col("userId") +: keyCols:_*)

或者您可以查看此thread 以了解其他方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多