mysql - org.apache.spark.sql.AnalysisException : cannot recognize input near 'num' ':' '=' in expression specification;

标签 mysql json apache-spark-sql

抱歉,标题有点长,但很准确:

我有一个mysql表产品(选择product_id,product_category_id,product_price)要查询以获取每个类别的前3条记录,并且我的查询正在工作,我需要通过执行相同的操作Spark在注册的临时表中:

val query = """
select product_id, product_category_id, product_price
from 
(
   select product_id, product_category_id, product_price,
      (@num:=if(@group = product_category_id, @num +1, if(@group := product_category_id, 1, 1))) row_number 
  from products t
  CROSS JOIN (select @num:=0, @group:=null) c
  order by product_category_id, product_price desc, product_id
) as x 
where x.row_number <= 3
"""

如果查询是可解析的,我可以得到相同的结果: val 结果 = sqlContext.sql(query)

但是,我收到了标题中提到的错误:

org.apache.spark.sql.AnalysisException: cannot recognize input near 'num' ':' '=' in expression specification; line 5 pos 11

我可以得出SparkSQL和MySQL之间语法存在一些限制的结论吗?或者我在这里遗漏了什么?你有不同的方法来获取 MySQL 中每组的前 3 条记录吗?

谢谢。

如果你有解决方案并且想在桌面上尝试一下,你可以在这里找到json数据: https://github.com/mdivk/175Scala/blob/master/data/product.json

最佳答案

对于将来阅读本文的任何人:

我相信这是因为 SparkSQL 不支持 @num:=,我最终得到的是下面使用分区和 row_number 的新查询:

val query = """
select  product_id , product_category_id, product_price,  row_number() over(partition by product_category_id  order by product_price  desc) as p_order from products  """

这在 SparkSQL 中被接受并返回我所期望的结果。

谢谢。

关于mysql - org.apache.spark.sql.AnalysisException : cannot recognize input near 'num' ':' '=' in expression specification;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49354514/

相关文章:

mysql - SQL 不只显示一种产品,而是显示更多产品

json - 如何使用 vscode 处理 JSON 中的大多行字符串?

json - 用大数组解析 json

scala - 如何根据分配的优先级选择最重要的行?

scala - 使用 Spark Scala 将数据插入到带有 HiveContext 的 Hive 表中

dataframe - 如何使用来自另一个数据帧的随机值更新 PySpark 中的数据帧?

mysql - 查询表中非唯一元素的数量

mysql - 不能在选择中使用用户变量

java - 如何反序列化JSON到接口(interface)?

php - 有时 mysql 全文搜索在应该返回任何结果时却没有返回任何结果