简体   繁体   English

如何从 Spark Scala 中的 Case 类映射数组

[英]How to Map Array from Case class in Spark Scala

Sample Data :( 251~jhon~WrappedArray([STD,Health,Duval]) )样本数据:( 251~jhon~WrappedArray([STD,Health,Duval]) )

case class xyz(id : String, code : String, County : String)

case class rewards(memId : String, name: String, part: Array[xyz])

val df = spark.read.textFile("file:///data/").rdd.map(r => r.split('~'))

val df2 = df.map(x => { rewards(x(0),x(1), Array[rewards.apply()] ) } )

tried many way to map an array from case class.尝试了很多方法来映射案例类中的数组。 tried apply function尝试应用功能

I am not sure that's what you are looking for but you can try using pattern matching to transform arrays into case classes.我不确定这就是您要查找的内容,但您可以尝试使用模式匹配将数组转换为 case 类。

val data: RDD[rewards] = sc
    .parallelize(Seq("251~jhon~WrappedArray([STD,Health,Duval])"))
    .map(_.split("~"))
    .map{ case Array(id, code, part) => (id, code, part
               .replaceFirst("\\s*WrappedArray\\(\\s*\\[\\s*", "")
               .replaceFirst("\\s*\\]\\s*\\)\\s*", "") 
    )}
    .map{ case (id, name, part) => rewards(id, name, part.split("\\s*,\\s*") match {
         case Array(id, code, county) => Array(xyz(id, code, county)) 
    })}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM