Я работаю с Spark 2.1, чтобы поместить файл csv в таблицу HIVE, которую он тоже создает.Но я получаю сообщение об ошибке, как показано ниже:
df = sqlcontext.read.load(
"/home/{}/{}/{}/*.csv".format(path, files),
format='com.databricks.spark.csv',
header='true',
inferSchema='true'
)
IndexError: tuple index out of range
Соответствующий код указан ниже:
from pyspark.sql import *
from pyspark.conf import SparkConf
spark = SparkSession\
.builder\
.master("local")\
.appName("CSV_to_HIVE")\
.enableHiveSupport()\
.getOrCreate()
sqlcontext = SQLContext(spark)
file_list = ['file1.csv', 'file2.csv', 'file3.csv', 'file4.csv']
file_path = ['<path_to_the_folder>']
for files in file_list:
for path in file_path:
df = sqlcontext.read.load(
"/home/{}/{}/{}/*.csv".format(path, files),
format='com.databricks.spark.csv',
header='true',
inferSchema='true'
)
df.registerTempTable("my_temp_table")
db_name = 'DB_NAME'
sqlContext.sql("create table {}.`{}_{}` stored as ORC as select * from my_temp_table".format(db_name, path, files))
ПРИМЕЧАНИЕ. Мои наблюдения приведены ниже: -
1)В sqlcontext.read.load () есть три кортежа для полного пути к файлам.2) изначально я начинал с двух кортежей, но в этом случае я получал ошибку, как показано ниже:
pyspark.sql.utils.AnalysisException: u'Path does not exist: hdfs://dev-batch-bi/home/home/<path_to>/file1.csv/*.csv;'
Так что из вышеприведенной ошибки очевидно, что «/ home» не должен быть частьюиз "/" разделенных кортежей.Кроме того, имя фактического файла CSV идет перед "/*.csv", что также неверно.Поэтому ни один из кортежей не должен быть скорректирован для выполнения задачи.Я попытался добавить третий кортеж, который я уже упоминал ранее в своем посте.Но это бесполезно.
Пожалуйста, помогите.