无法将变量传递给 pyspark 中的 spark sql 查询

Posted

技术标签:

【中文标题】无法将变量传递给 pyspark 中的 spark sql 查询【英文标题】:Cannot pass variables to a spark sql query in pyspark 【发布时间】:2018-01-03 18:48:03 【问题描述】:

我有一个日期数据类型的 python 变量(我正在使用 pyspark): 变量值为2016-10-31

print type(load_dt)

 >> <type 'datetime.date'>

我很难将它传递给 sparksql 查询:

    hive_context.sql("select * from  tbl t1 where cast (substring(t1.dt,1,10) as date) =0".format(load_dt));

    Error:

    u"cannot resolve '(cast(substring(dt,1,10) as date) = ((2016 - 10) - 31))' due to data type mismatch: differing types in '(cast(substring(period_dt,1,10) as date) = ((2016 - 10) - 31))'
 (date and int)

【问题讨论】:

【参考方案1】:

添加引号:

"select * from  tbl t1 where cast (substring(t1.dt,1,10) as date) = '0'"

否则日期将转换为2016-10-31字符串并解释为算术表达式:

2016 - 10 - 31 

【讨论】:

以上是关于无法将变量传递给 pyspark 中的 spark sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

pyspark:将多个数据框字段传递给 udf

Pyspark 和使用 UDF:如何将 Python 参数(sys.argv、argparse)传递给 Python Worker?

安装 Spark 问题。无法使用 pyspark 打开 IPython Notebook

如何将列表传递给pyspark中的selectExpr方法?

pyspark 使用名称中的变量将数据框保存到配置单元表

PySpark - Spark 集群 EC2 - 无法保存到 S3