我的地图的值来自数据库中的多个不同列。这些值在两者之间有下划线。例如,
newMap("A", 23_null_12_09asfA)
这里,23来自A列,B来自B列,依此类推。现在,考虑一个有20个值的地图。我想知道如何将这些值拆分成数组或如何拆分和存储它们?
答案 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
我希望它有用