无法在pyspark中创建Dataframe并将其写入配置单元表

xuo3flqw  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(312)

我试图在pyspark中创建一个Dataframe,然后将其作为一个配置单元表写入,然后将其读回,但它不起作用。。。

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

j0pj023g

j0pj023g1#

这是因为:

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版本中使用)

相关问题