2017-05-05 3 views
0

私は、データベース内の複数の異なる列に由来する値を持つマップを持っています。値の中間にアンダースコアがあります。たとえば、Scalaのマップで値を分割する方法は?

newMap("A", 23_null_12_09asfA) 

ここで23は列Aから、列Bからはnullになります。さて、20の値を持つマップを考えてみましょう。これらの値を配列に分割する方法や分割して格納する方法を知りたいですか?

+0

有用であると思いますが、「すべてを一度に分割し、データフレームに入れて」 - どういう意味ですか?希望の出力の例を表示できますか?また、コレクション全体で20レコードしかない場合、DataFramesを使用する目的は何か、DataFramesは大規模なコレクションを分散処理するのに便利で、小規模なコレクションに対しては不要なオーバーヘッドを作成します。 –

+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 

することができ、私はそれが

関連する問題