2016-01-15 3 views
1

У меня есть таблица улей, который имеет несколько вложенных каталогов в HDFS, что-то вроде:PySpark - читать рекурсивный таблицу улей

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

Обычно я установить следующие параметры перед тем, как запустить улей скрипт:

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 

Каков правильный способ чтения таблицы Hive с подкаталогами Spark?

ответ

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") 
0

То, что я обнаружил, что эти значения должны предшествовать искрой, как в:

.set("spark.hive.mapred.supports.subdirectories","true") 
.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive","true") 

 Смежные вопросы

  • Нет связанных вопросов^_^