2

次のような HDFS に複数のサブディレクトリを持つ Hive テーブルがあります。

/hdfs_dir/my_table_dir/my_table_sub_dir1
/hdfs_dir/my_table_dir/my_table_sub_dir2
...

通常、Hive スクリプトを実行する前に、次のパラメーターを設定します。

set hive.input.dir.recursive=true;
set hive.mapred.supports.subdirectories=true;
set hive.supports.subdirectories=true;
set mapred.input.dir.recursive=true;

select * from my_db.my_table;

私はPySparkを使って同じことをしようとしています.

conf = (SparkConf().setAppName("My App")
        ...
        .set("hive.input.dir.recursive", "true")
        .set("hive.mapred.supports.subdirectories", "true")
        .set("hive.supports.subdirectories", "true")
        .set("mapred.input.dir.recursive", "true"))

sc = SparkContext(conf = conf)

sqlContext = HiveContext(sc)

my_table = sqlContext.sql("select * from my_db.my_table")

次のようなエラーが発生します。

java.io.IOException: Not a file: hdfs://hdfs_dir/my_table_dir/my_table_sub_dir1

Sparkでサブディレクトリを持つHiveテーブルを読み取る正しい方法は何ですか?

4

3 に答える 3

0

クエリを実行する前に、ctx.sql() で設定してみてください。

sqlContext.sql("SET hive.mapred.supports.subdirectories=true")
sqlContext.sql("SET mapreduce.input.fileinputformat.input.dir.recursive=true")
my_table = sqlContext.sql("select * from my_db.my_table")
于 2016-07-06T20:29:19.340 に答える