Spark / Scala / SparkSQL 数据帧过滤器问题 "data type mismatch"
Spark / Scala / SparkSQL dataframes filter issue "data type mismatch"
我的问题是我有一个代码将列表中的过滤器列和值作为参数
val vars = "age IN ('0')"
val ListPar = "entered_user,2014-05-05,2016-10-10;"
//val ListPar2 = "entered_user,2014-05-05,2016-10-10;revenue,0,5;"
val ListParser : List[String] = ListPar.split(";").map(_.trim).toList
val myInnerList : List[String] = ListParser(0).split(",").map(_.trim).toList
if (myInnerList(0) == "entered_user" || myInnerList(0) == "date" || myInnerList(0) == "dt_action"){
responses.filter(vars +" AND " + responses(myInnerList(0)).between(myInnerList(1), myInnerList(2)))
}else{
responses.filter(vars +" AND " + responses(myInnerList(0)).between(myInnerList(1).toInt, myInnerList(2).toInt))
}
对于除包含日期的字段之外的所有字段,函数都可以正常工作,但对于包含日期的字段,它会抛出错误
注意:我正在处理镶木地板文件
这是错误
当我尝试手动编写时,我得到了相同的结果
这是它发送到 sparkSQL 的查询的方式
第一个有收入的有效,但第二个无效
并且当我尝试仅使用日期进行过滤而没有包含其他列的“vars”的值时,它起作用了
好吧,我的问题是我在 sql 和 spark 之间混合,当我试图连接 sql 查询时,这是我的变量“vars”whith df.filter() 尤其是当我在运算符之间使用时,它给出了 sparksql 无法识别的输出格式,即
age IN ('0') AND ((entered_user >= 2015-01-01) AND (entered_user <= 2015-05-01))
它可能看起来是正确的,但在查看 sql 文档后它缺少括号(在 vars 中)它需要
(age IN ('0')) AND ((entered_user >= 2015-01-01) AND (entered_user <= 2015-05-01))
好吧,解决方案是我需要正确地连接它们,因此我必须将“expr”添加到变量 vars 中,这将产生所需的语法
responses.filter(expr(vars) && responses(myInnerList(0)).between(myInnerList(1), myInnerList(2)))
我的问题是我有一个代码将列表中的过滤器列和值作为参数
val vars = "age IN ('0')"
val ListPar = "entered_user,2014-05-05,2016-10-10;"
//val ListPar2 = "entered_user,2014-05-05,2016-10-10;revenue,0,5;"
val ListParser : List[String] = ListPar.split(";").map(_.trim).toList
val myInnerList : List[String] = ListParser(0).split(",").map(_.trim).toList
if (myInnerList(0) == "entered_user" || myInnerList(0) == "date" || myInnerList(0) == "dt_action"){
responses.filter(vars +" AND " + responses(myInnerList(0)).between(myInnerList(1), myInnerList(2)))
}else{
responses.filter(vars +" AND " + responses(myInnerList(0)).between(myInnerList(1).toInt, myInnerList(2).toInt))
}
对于除包含日期的字段之外的所有字段,函数都可以正常工作,但对于包含日期的字段,它会抛出错误
注意:我正在处理镶木地板文件
这是错误
当我尝试手动编写时,我得到了相同的结果
这是它发送到 sparkSQL 的查询的方式
第一个有收入的有效,但第二个无效
并且当我尝试仅使用日期进行过滤而没有包含其他列的“vars”的值时,它起作用了
好吧,我的问题是我在 sql 和 spark 之间混合,当我试图连接 sql 查询时,这是我的变量“vars”whith df.filter() 尤其是当我在运算符之间使用时,它给出了 sparksql 无法识别的输出格式,即
age IN ('0') AND ((entered_user >= 2015-01-01) AND (entered_user <= 2015-05-01))
它可能看起来是正确的,但在查看 sql 文档后它缺少括号(在 vars 中)它需要
(age IN ('0')) AND ((entered_user >= 2015-01-01) AND (entered_user <= 2015-05-01))
好吧,解决方案是我需要正确地连接它们,因此我必须将“expr”添加到变量 vars 中,这将产生所需的语法
responses.filter(expr(vars) && responses(myInnerList(0)).between(myInnerList(1), myInnerList(2)))