Spark HiveContext 使用 sql 方法应用 IN 操作

Posted

技术标签:

【中文标题】Spark HiveContext 使用 sql 方法应用 IN 操作【英文标题】:Spark HiveContext apply IN operation using sql method 【发布时间】:2020-05-27 07:20:42 【问题描述】:

我有一个员工配置单元表,其中包含 Name 、 Department 、 City 列,我想在 HiveContext.sql() 函数中使用 IN 操作根据员工姓名检索数据,但它抛出 pyspark.Analysis Exception.please在下面的示例中。

员工表:

Name   Department  City
Ram     FDE        Mumbai
Ramesh  CTZ        Pune
Suraj   FDE        Chennai
Varun   CTZ        Delhi

查询:

SELECT * from employee WHERE Name in ('Ramesh' , 'Varun')

来自 spark 程序的代码 sn-p:

namesList= ['Ramesh' , 'Varun']
data = HiveContext.sql('SELECT * from employee WHERE Name in (namesList)'.format(namesList = namesList))

我尝试修改并传递字符串而不是列表,但错误仍然相同

Error:pyspark.AnalysisException : structType field

如果我在这里做错了什么,请帮助我并建议我。

【问题讨论】:

【参考方案1】:

您应该在创建查询时从 python 列表中删除方括号 - str(namesList)[1:-1]

data = HiveContext.sql('SELECT * from employee WHERE Name in (namesList)'.format(namesList = str(namesList)[1:-1]))

【讨论】:

【参考方案2】:

替换 这个

data = HiveContext.sql('SELECT * from employee WHERE Name in (namesList)'.format(namesList = namesList))

有了这个

data = HiveContext.sql("SELECT * from employee WHERE Name in (namesList)".format(namesList = "'"+"','".join(namesList)+"'"))

你需要传递字符串而不是列表。

【讨论】:

以上是关于Spark HiveContext 使用 sql 方法应用 IN 操作的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL(通过 HiveContext 进行 Hive 查询)总是创建 31 个分区

Spark SQL:HiveContext 不要忽略标头

Spark SQL HiveContext - saveAsTable 创建错误的架构

使用 spark hivecontext 读取外部 hive 分区表的问题

在 spark 1.6 中计数(不同)不能与 hivecontext 查询一起使用

HiveContext 与火花 sql