2017-05-05 26 views
0

我有一個地圖,其值來自數據庫中的多個不同列。這些值之間具有下劃線。例如,如何在Scala中分割地圖中的值?

newMap("A", 23_null_12_09asfA) 

這裏,23來自列A,而來自列B等,等等。現在,考慮一個有20個值的地圖。我想知道如何將這些值拆分爲數組或如何拆分和存儲它們?

+0

「分裂一下子,把它放在一個數據幀」 - 你什麼意思?你能展示一個期望輸出的例子嗎?如果整個集合只有20條記錄,那麼使用DataFrames的目的是什麼?DataFrame有助於分佈式地處理大集合,並且只會爲小集合創造不必要的開銷。 –

+0

整個集合有超過50,000條記錄,但是我以20爲例。 –

+0

我會更加清楚。我有這樣的值23_null_23dA。我想分割這些值,將它們存儲起來,並想用原始值執行檢查。 –

回答

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] |

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 

我希望這是有幫助的