开发者社区> 问答> 正文

Spark Frameless with Column Renamed 嵌套字段

假设我有以下代码

case class MyTypeInt(a: String, b: MyType2)
case class MyType2(v: Int)
case class MyTypeLong(a: String, b: MyType3)
case class MyType3(v: Long)

val typedDataset = TypedDataset.create(Seq(MyTypeInt("v", MyType2(1))))
typedDataset.withColumnRenamed(???, typedDataset.colMany('b, 'v).cast[Long]).as[MyTypeLong]
当我尝试转换的字段嵌套时,如何实现此转换?withColumnRenamed的签名在第一个参数中请求一个符号,所以我不知道如何做到这一点......

展开
收起
社区小助手 2018-12-06 15:14:10 2669 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    withColumnRenamed不允许您转换列。要做到这一点,你应该使用withColumn。然后,一种方法是转换列并重新创建结构。

    scala> val new_ds = ds.withColumn("b", struct($"b.v" cast "long" as "v")).as[MyTypeLong]
    scala> new_ds.printSchema
    root
    |-- a: string (nullable = true)
    |-- b: struct (nullable = false)
    | |-- v: long (nullable = true)
    另一种方法是自己使用map和构建对象:

    ds.map{ case MyTypeInt(a, MyType2(b)) => MyTypeLong(a, MyType3(b)) }

    2019-07-17 23:18:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载