如何在Scala中拆分地图中的值?

时间:2017-05-05 14:08:34

标签: scala apache-spark hashmap linkedhashmap

我的地图的值来自数据库中的多个不同列。这些值在两者之间有下划线。例如,

newMap("A", 23_null_12_09asfA) 

这里,23来自A列,B来自B列,依此类推。现在,考虑一个有20个值的地图。我想知道如何将这些值拆分成数组或如何拆分和存储它们?

2 个答案:

答案 0 :(得分:0)

val baseRDD=sc.parallelize(List(("john","1_abc_2"),("jack","3_xyz_4")))
val sRDD = baseRDD.map(x=> x._2.split("_"))
val resultDF=sRDD.toDF
resultDF.show

| [1,abc,2] |
| [3,xyz,4] |

答案 1 :(得分:0)

根据我对您的问题和解释的理解,以下可以是您的解决方案

val newMap: HashMap[String, String] = HashMap(("A", "23_null_12_09asfA"),
  ("B", "24_null_13_09asfB"),
  ("C", "25_null_14_09asfC"),
  ("D", "25_null_14_09asfC"),
  ("E", "25_null_14_09asfC"),
  ("F", "25_null_14_09asfC"),
  ("G", "25_null_14_09asfC"))

val schema = StructType(Array(StructField("col1", StringType, true),
  StructField("col2", StringType, true),
  StructField("col3", StringType, true),
  StructField("col2", StringType, true)))

val rdd = sparkContext.parallelize(newMap.map(hashmap => Row.fromSeq(hashmap._2.split("_"))).toSeq)

sqlContext.createDataFrame(rdd, schema).show

我希望它有用