【发布时间】:2021-04-08 16:35:42
【问题描述】:
我正在使用 hadoop 3.0.0 和 spark 2.2.0 中的以下 scala 代码处理数据帧。 BAQ 是 ID 列,AAA 是日期 YYMMDD 的字符串列。
scala> val dtfAbnoFirs=dtfAbno.filter("AAA>='20201201' and BAQ<>'0'").
| groupBy("BAQ").agg("AAA"->"min");
dtfAbnoFirs: org.apache.spark.sql.DataFrame = [BAQ: string, min(AAA): string]
scala> val dtfBase = dtfCons.select("BAQ","AAA").distinct().filter("BAQ<>'0'").
| join(dtfAbnoFirs,Seq("BAQ"),"inner");
dtfBase: org.apache.spark.sql.DataFrame = [BAQ: string, AAA: string ... 1 more field]
scala> val dtfBaseEsti=dtfBase.filter("AAA<min(AAA)");
dtfBaseEsti: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [BAQ: string, AAA: string ... 1 more field]
scala> dtfBaseEsti.show(10,false);
org.apache.spark.sql.catalyst.errors.package$TreeNodeException: execute, tree:
Exchange hashpartitioning(BAQ#12, 200)
它通过 filter("AAA 这些是一些错误行。我用 AAA 作为 double 重新创建了数据帧,得到了同样的错误。org.apache.spark.sql.catalyst.errors.package$TreeNodeException: execute, tree:
Exchange hashpartitioning(BAQ#12, 200)
+- *HashAggregate(keys=[BAQ#12, AAA#13], functions=[], output=[BAQ#12, AAA#13])
....
....
Caused by: java.lang.UnsupportedOperationException: Cannot evaluate expression: min(input[1, string, false])
【问题讨论】:
-
过滤 AAA
-
加入后,在同一个数据框 dtfBaseEsti 中,AAA 有全年的日期,而 min(AAA) 只有 12 月的日期。另外,即使它什么也不返回,也不应该返回错误
-
哦,我误读了这个问题。你能试试
"AAA<`min(AAA)`"吗?min列名需要用反引号转义,否则将被解释为 AAA 列的最小值。
标签: scala dataframe apache-spark