2017-01-04 9 views
0

私はSparkの初心者です(1ヶ月以内!)固定幅のフラットファイルの生データ入力を扱っています。私は、sqlContextを使用して、com.databricks.spark.csvを使用してファイルを読み込み、.withColumnを使用して、設定された幅に基づいて行を部分文字列にします。固定幅ファイルの読み込み

rawData.withColumn("ID"), trim(rawData['c0'].substr(1,8))) 

私が直面している問題は、最後のフィールドが可変幅であることです。それは固定開始点を持っていますが、20文字幅のようなデータの「セット」の可変数です。例えば

Row 1 A 1243 B 42225 C 23213 
Row 2 A 12425 
Row 3 A 111 B 2222 C 3 D 4 E55555 

だから、僕は可変幅の列内の各グループの最初の文字を引き出し、その後、出力が見えるように移調、最終的にこれらの変数のフィールドに読み取る必要があるように:

Row 1 A 
Row 1 B 
Row 1 C 
Row 2 A 
... 
Row 3 D 
Row 3 E 

私は必要な固定幅の列を読みましたが、可変幅のフィールドに固定されています。

+0

の行にデータを転置するのを助けることができます。 – Abhi

答えて

0

zipWithIndexと爆発は、あなたがアルファベットで終わるようにするには、数値を削除するために正規表現を使用することができ、各要素

sc.textFile ("csv.data").map(_.split("\\s+")).zipWithIndex.toDF("dataArray","rowId").select ($"rowId",explode($"dataArray")).show(false) 

+-----+------+ 
|rowId|col | 
+-----+------+ 
|0 |A  | 
|0 |1243 | 
|0 |B  | 
|0 |42225 | 
|0 |C  | 
|0 |23213 | 
|1 |A  | 
|1 |12425 | 
|2 |A  | 
|2 |111 | 
関連する問題