0
我有一个地图,其值来自数据库中的多个不同列。这些值之间具有下划线。例如,如何在Scala中分割地图中的值?
newMap("A", 23_null_12_09asfA)
这里,23来自列A,而来自列B等,等等。现在,考虑一个有20个值的地图。我想知道如何将这些值拆分为数组或如何拆分和存储它们?
我有一个地图,其值来自数据库中的多个不同列。这些值之间具有下划线。例如,如何在Scala中分割地图中的值?
newMap("A", 23_null_12_09asfA)
这里,23来自列A,而来自列B等,等等。现在,考虑一个有20个值的地图。我想知道如何将这些值拆分为数组或如何拆分和存储它们?
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] |
据我从你的问题,解释明白,下面就可以是你的解决方案
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
我希望这是有帮助的
“分裂一下子,把它放在一个数据帧” - 你什么意思?你能展示一个期望输出的例子吗?如果整个集合只有20条记录,那么使用DataFrames的目的是什么?DataFrame有助于分布式地处理大集合,并且只会为小集合创造不必要的开销。 –
整个集合有超过50,000条记录,但是我以20为例。 –
我会更加清楚。我有这样的值23_null_23dA。我想分割这些值,将它们存储起来,并想用原始值执行检查。 –