2017-11-28 13 views
0

ハイブパーティション化された列は、保存されたデータの一部ではないため、RDDにロードされるsc.textFile(filePath)構文でどのように引き出すことができるかを知る必要があります。ハイブパーティション化された列がsc.textFile経由でrddに表示されない

ハイブコンテキストを作成するもう1つの方法を知っていますが、sc.textFile(filePath)という構文で直接取得して使用する方法があるのだろうかと疑問に思っていました。

答えて

0

保存時にデータを列で区切ると、その列のデータはファイル構造に格納され、実際のファイルには格納されません。 sc.textFile(filePath)は1つのファイルを読み込むために作られているので、私はパーティション化されたデータの読み込みをサポートしているとは思わない。

私は例えば、データフレームとしてデータを読み込むをお勧めします:

val df = hiveContext.read().format("orc").load("path/to/table/") 

wholeTextFiles()方法を使用することもできます。次に、(file path, file data)のタプルを取得し、パーティション化されたデータ列を解析して新しい列として追加できるようにする必要があります。

ストレージサイズに問題がない場合は、パーティション化された列の情報を2回格納する方法があります。一旦ファイル構造に入ると(その列を分割して)、もう一度データ自体に入ります。これは、ファイルをコピーする前に列を複製することによって達成されます。

val df2 = df.withColumn("colADup", $"colA") 
df2.write.partitionBy("colADup").orc("path/to/save/") 

これはまた、簡単に複数の列に拡張することができ、問題の列がcolAという名前であると言います。

+0

パーティション化された列名を抽出し、sc.textFile(filePath)で作成した要素に追加するなどの方法があるのだろうか。私が考えることができる1つの方法は、パーティションに加えて、ファイル内の列を持たせることです - フォルダの名前を指定するのに使用され、他のものはデータファイルの一部になりますが、正しい方法は分かりません。これをHiveContext経由で行うのは問題ありませんが、コア・スパークによる方法を見つけようとしています。 – Jay

+0

@Jayはい、そのようにすることも可能です。そのメソッドを 'wholeTextFiles()'メソッドを使ったものと同様に答えに加えました。 – Shaido

+0

@ジェイ:あなたが助けてくれたら、答えを受け入れることを検討してください。詳細については、こちらをご覧ください:https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Shaido

関連する問題