天天看点

pyspark dataframe存hive表

##pyspark dataframez存hive表

需要写入hive表的dataframe为df_write,需要写入名为course_table的hive表

这种表方式不用关心原来名为course_table的表结构和现有表结构是否一致,该写法会先删除原表再新建表,表项没有注释也会产生小文件的问题,为了避免小文件的问题,可以采用以下写法:

先创建hive表

sp = Spark()
spark = sp.spark
COURSE_TABLE_SAVE_NAME = 'course_table'
spark.sql("CREATE TABLE IF NOT EXISTS %s (course_id string COMMENT '课程ID', course_name string COMMENT '')COMMENT '课程名称'"% (COURSE_TABLE_SAVE_NAME,))

ct = df_write.count()  # 计算需要存表的条数
if ct == 0:
	return
df_write = df_write.repartition(int(ct/100000 +1))).persist()  # 避免产生很多小文件,限定文件个数

df.registerTempTable("tmp_table_df")
spark.sql("insert overwrite table %s from tmp_df" % (COURSE_TABLE_SAVE_NAME,))