无法在pyspark中创建数据框并将其写入Hive表

时间:2018-01-05 21:12:19

标签: python apache-spark hive pyspark

我正在尝试在pyspark中创建一个数据帧,然后将其写为Hive表,然后将其读回,但它无效...

sqlContext = HiveContext(sc)

hive_context = HiveContext(sc) #Initialize Hive

#load the control table 
cntl_dt = [('2016-04-30')]
rdd = sc.parallelize(cntl_dt)
row_cntl_dt = rdd.map(lambda x: Row(load_dt=x[0]))
df_cntl_dt = sqlContext.createDataFrame(row_cntl_dt)
df_cntl_dt.write.mode("overwrite").saveAsTable("schema.cntrl_tbl")
load_dt  = hive_context.sql("select load_dt  from schema.cntrl_tbl" ).first()['load_dt'];
print (load_dt)

打印:2

我期待:2016-12-31

1 个答案:

答案 0 :(得分:1)

这是因为:

cntl_dt = [('2016-04-30')]

不是单个元素tuple的有效语法。报价将被忽略,结果将与:

相同
['2016-04-30']

Row(load_dt=x[0])

会给:

Row(load_dt='2')

使用:

cntl_dt = [('2016-04-30', )]

此外,您正在混合使用不同的上下文(SQLContextHiveContext),这通常是一个坏主意(两者都不应在最近的Spark版本中使用)