2017-06-22 5 views
2

に行くにコピー:CSVデータエクスポート/ HDFSは、私は次のコード行使用してHDFSにそのデータを記載したエリアからcsvファイルのデータを読み取り、対処するためのスパークジョブを使用しています奇妙な形式

val conf = new SparkConf().setAppName("WCRemoteReadHDFSWrite").set("spark.hadoop.validateOutputSpecs", "true"); 

val sc = new SparkContext(conf) 
val rdd = sc.textFile(source) 

rdd.saveAsTextFile(destination) 

csvファイルがあるのフォーマットは次のデータを有する:

CTID、C3UID、地域、製品、キーワード

1,1004634181441040000、イースト、モバイル、NA

2,1004634181441040000、西、タブレット、NA

一方のデータが、それは次の形式になりますHDFSに入るとき:

CTID、C3UID、地域、製品、キーワード

1,1.00463 E + 18、東、モバイル、NA

2,1.00463E + 18、西、タブレット、NA

私はこれの背後にある正当な理由を見つけることができません。 どんな種類の助けにも感謝します。

よろしく、 Bhupesh

答えて

3

何が起こるかは、あなたのC3UIDが多数あるので、それはダブルとして解析されますと、標準のダブル表記で保存されていることです。スキーマを修正して、2番目の列をLong、BigDecimal、Stringのいずれかとして読んで、String表現に変更がないことを確認する必要があります。

+0

私は自分のスキーマを修正すべきだと言ったときに@Rick Moritzを返信してくれてありがとう、Spark Dataframe API共有場所からデータを読み取り、そのデータをHDFSに書き込んでいますか? –

+0

@ChauhanB:必ずしもそうではありませんが、それは助けになるかもしれません。良い出発点は、RDDにあるタイプをチェックすることです.Doubleの検出はsc.textFileやsaveステップですでに発生している可能性があります。実際にデータをコピーするだけの場合は、Spark内部ではなくHDFS-APIの使用を検討してください。フォローアップ処理でデータを再利用したい場合は、Sparkを使用する方が良いオプションです。この種のデータでは、DataFrame APIが適しているので、お勧めします。 –

+0

私はSpark APIに行きたいと思っています。私は何らかのデータをやりたいと思っています。データをHDFSに保存する前に、行データの上でクレンジングしています。私はApache Nifiのような他のツールも探ってきましたが、Apache Nifiのために余分なクラスタを持つコストを避けたいと思います。私は、HDFSでデータをロードした後、私の主なアプリケーションが実行される既存のスパークとHDFSクラスタを活用したいと考えています。あなたはそれを良いアプローチと見なしていますか?データをHDFSに保存する前に、Sparkを使ってデータを保存することは良いアイデアだと思いますか? –

0

場合によっては、あなたのCSVファイルが原因になることもあります。 excelでCSVファイルを開かないでください。excelは大きな数値を指数形式に変換できるため、hdfsにデータをインポートするためにsparkジョブを使用すると、文字列形式になります。

したがって、sparkジョブを使用してhdfsにインポートする前に、CSVのデータをExcelで開くことは絶対に避けてください。あなたが本当にあなたのExcelのコンテンツを見たい場合は、notepad ++やその他のテキストエディタツールを使用してください。

関連する問題