从 excel 中读取数据并插入 HIVE

Posted

技术标签:

【中文标题】从 excel 中读取数据并插入 HIVE【英文标题】:Read data from excel and insert into HIVE 【发布时间】:2018-01-22 10:53:14 【问题描述】:

我正在使用 pandas 从 Excel 工作表中读取数据。我需要使用 pyspark 将数据插入 HIVE。

sparkConf = SparkConf().setAppName("App")
sc = SparkContext(conf = sparkConf)

sqlContext = HiveContext(sc)

excel_file = pd.ExcelFile("export_n_moreExportData10846.xls")
for sheet_name in excel_file.sheet_names:
try:
    df = pd.read_excel(excel_file, header=None, squeeze=True, sheet_name=sheet_name)
    for i, row in df.iterrows():
        if row.notnull().all():
            data = df.iloc[(i+1):].reset_index(drop=True)
                data.columns = list(df.iloc[i])
                break
        for c in data.columns:
        data[c] = pd.to_numeric(data[c], errors='ignore')
    print data #I need to insert this data into HIVE

except:
    continue

【问题讨论】:

【参考方案1】:

如果列类型与 Spark 兼容,您可以使用以下代码保存 Pandas 数据框:

tablename = 'your_table_name'
df_spark = sqlContext.createDataFrame(data)

#Remove spaces from your column names
columns_with_spaces = filter(lambda x:' ' in x,df.columns)
for column in columns_with_spaces:
     old_column = column
     new_column = column.replace(' ','_')
     df_spark =  df_spark.withColumnRenamed(old_column , new_column)

#Save to Hive
df_spark.write.mode('overwrite').saveAsTable(tableName)

【讨论】:

18/01/22 17:05:16 WARN ObjectStore:无法获取数据库 global_temp,返回 NoSuchObjectException 这是预期的行为。如果默认数据库不存在,元存储会发出警告并创建默认数据库。:issues.apache.org/jira/browse/SPARK-14067 18/01/22 17:07:32 错误 CreateDataSourceTableAsSelectCommand:无法写入表 mytablename org.apache.spark.sql.AnalysisException:属性名称“TC Title”包含无效字符" ,;()\n\t=".请使用别名重命名。; 抱歉,您的列 TC Title 中有一个空格,您需要重命名该列才能将其保存到 Hive 中,例如 TC_Title 有什么简单的重命名方法吗?或者有没有办法先使用列创建表,然后将数据插入其中【参考方案2】:

您可以查看 HadoopOffice 库,它在主要大数据平台(MR、Hive、Flink、Spark...)上提供具有许多功能的 Excel 读/写: https://github.com/ZuInnoTe/hadoopoffice/wiki

【讨论】:

以上是关于从 excel 中读取数据并插入 HIVE的主要内容,如果未能解决你的问题,请参考以下文章

使用列名从excel中读取数据并插入到C#中的SQL表中

vb.net如何与excel建立连接,并从里面查询并读取数据?

jxl的使用,从excel插入数据以及读取数据

从 Excel 表中读取员工的日程安排

python——快速读取excel文件并插入数据库

mapreduce 程序从 hive 读取数据