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 - saveAsTable 创建错误的架构
使用 spark hivecontext 读取外部 hive 分区表的问题