首页 > 解决方案 > 为什么将 csv 文件通过 spark 推送到 HIVE 抛出 IndexError?

问题描述

我正在使用 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) 最初我只从 2 个元组开始,但在这种情况下,我收到如下错误:

pyspark.sql.utils.AnalysisException: u'Path does not exist: hdfs://dev-batch-bi/home/home/<path_to>/file1.csv/*.csv;'

所以从上面的错误中,很明显“/home”不应该是“/”分隔元组的一部分。此外,实际 csv 文件的名称位于“/*.csv”之前,这也是错误的。因此,无需调整任何元组即可完成任务。我尝试添加我在帖子前面已经提到的第三个元组。但这没有用。

请帮忙。

标签: pythonhivepysparkapache-spark-2.0

解决方案


推荐阅读