我正在尝试在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
答案 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', )]
此外,您正在混合使用不同的上下文(SQLContext
和HiveContext
),这通常是一个坏主意(两者都不应在最近的Spark版本中使用)