2017-06-24 3 views
1

私は| .csvファイルを持っています。それが可能であるScalaを使用してcsvファイルのフィールド内の区切り文字を処理します

ARQJXPL1187B9B4D6B|TRWUJAE128F92E3E7D|M|A|R|R|S 
ARZCIDG1187B992CE3||Kid Creole | The Coconuts 

:不規則な

ARVYNKF1272BA83168|TRAGGZG128F92F9B5E|Black Devil Disco Club 

:区切り文字と次のコマンドは、

val df_artist = spark.read.format("com.databricks.spark.csv").option("header", "false").option("delimiter", "|").option("mode", "DROPMALFORMED").load("./artists.csv"); 

普通のアーティストの名前の内側に区切り文字が含まれているいくつかのレコードのためのexept、私に合います区切り文字を無視して、最初の2つの列と3番目の列に置かれるものをすべて作成しますか?

私は重要な場合は、Spark 2.1.1を使用します。

答えて

0

私はcsvファイルと|区切りとsplitラインを読み、最初の2列と3列目のように残りの部分と最初の2つの文字列を選択するsparkContexttextFileを使用することをお勧めします。上記のコードの

ARVYNKF1272BA83168|TRAGGZG128F92F9B5E|Black Devil Disco Club 
ARQJXPL1187B9B4D6B|TRWUJAE128F92E3E7D|M|A|R|R|S 
ARZCIDG1187B992CE3||Kid Creole | The Coconuts 

出力は以下のようになり、このための作業のコードは、与えられた

val data = sc.textFile("./artists.csv") 
data.map(line => line.split("\\|")) 
    .map(array => (array(0), array(1), array.drop(2))) 
    .toDF("rowId", "ticketId", "movies") 
    .show(false) 

で、入力ファイルにはデータが含まれている

+------------------+------------------+----------------------------+ 
|rowId    |ticketId   |movies      | 
+------------------+------------------+----------------------------+ 
|ARVYNKF1272BA83168|TRAGGZG128F92F9B5E|[Black Devil Disco Club] | 
|ARQJXPL1187B9B4D6B|TRWUJAE128F92E3E7D|[M, A, R, R, S]    | 
|ARZCIDG1187B992CE3|     |[Kid Creole , The Coconuts]| 
+------------------+------------------+----------------------------+ 
関連する問題