2016-11-24 6 views
1

同じファイル内の異なるフィールド区切り文字と新しい行区切り文字以外のテキストファイルを処理するオプションは何ですか? ファイルの一部のフィールドは固定長にすることができ、一部は文字で区切ることができます。異なるフィールド区切り文字を持つHadoopプロセスファイル

例:
100 XYZ |この例では、ABC1 @世界

、100はABCがあり、xyzは2番目のフィールド値で、最初のフィールド値である|こんにちは#200 XYZ1 @ ABC 3番目のフィールド値、helloは4番目のフィールド値です。 | @は3番目と4番目のフィールドの区切り文字です。行は#で区切られています。

マップ還元またはブタまたはハイブのいずれの解決策も問題ありません。

カスタム行区切り文字を設定し、行全体を読み取り、同じ行を処理するオプションが1つあります。しかし、どのようなInputFormatもカスタム区切り文字を受け入れますか?

答えて

1

でハイブを試みることができる「|」をそして '@'文字をスペースで置き換えます。その後、すべてのフィールドを ''で区切ってSTRSPLITを使用して個々のフィールドを取得します。

SET textinputformat.record.delimiter '#' 

A = LOAD 'data.txt' AS (line:chararray); 
B = FOREACH A REPLACE(REPLACE(line,'|',' '),'@',' ') AS line;-- Note:'\\|' if you need to escape '|' 
C = FOREACH B GENERATE STRSPLIT(line,' ',4); 
DUMP C; 
0

あなたがレコード区切り文字を上書きして、#.Afterに設定行としてレコードをロードすることにして、交換することができRegexSerDe

関連する問題