python - 为什么将 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”之前,这也是错误的。因此,无需调整任何元组即可完成任务。我尝试添加我在帖子前面已经提到的第三个元组。但这没有用。
请帮忙。
解决方案
推荐阅读
- python - 如何删除随机数字行中的最后一个逗号?
- aggregation - 将关系分类为关联或组合
- android-studio - 带有文本 android studio 的微调器
- php - 无法按列计算表的总数
- android - 运行 apk 文件时不显示图像实例,但在桌面上运行良好
- arrays - 使用数组和循环更新 MySQL 表
- python - 使用 python 使用 Outlook 365 发送敏感邮件
- excel - Excel - 在两个不同列中寻找两个不同值的重合并提取另一列
- css - 向 Angular Material 表中的列添加阴影
- google-apps-script - Google App Script - 日历更新触发器触发 4 次