sql - Spark 数据透视表不适用于表达式映射
问题描述
这是我要解决的问题的代表。我有一个数据框,我需要旋转它。有了这个,我需要在不同的列上应用不同的聚合函数。
这个例子我在 nos 的频率上旋转一个 df:
val unique_nos = Seq(1, 2, 3, 4)
val df = Seq(1, 2, 3, 1, 2, 2, 3, 2, 1, 3, 4).toDF("nos")
df.groupBy("nos").pivot("nos", unique_nos).agg(count(col("nos"))).show(10)
这给出了输出
+---+----+----+----+----+
|nos| 1| 2| 3| 4|
+---+----+----+----+----+
| 1| 3|null|null|null|
| 3|null|null| 3|null|
| 4|null|null|null| 1|
| 2|null| 4|null|null|
+---+----+----+----+----+
这很酷,但我需要将单独的 agg 函数应用于单独的列,所以这次我做这样的事情(为简单起见,我将相同的函数映射到所有 cols。实际上,我将制作一个分配了不同 agg 函数的 seq) :
val unique_nos = Seq(1, 2, 3, 4)
val exprs1 = unique_nos.map(_.toString -> "count").toMap
val df = Seq(1, 2, 3, 1, 2, 2, 3, 2, 1, 3, 4).toDF("nos")
df.groupBy("nos").pivot("nos", unique_nos).agg(exprs1).show(10)
但这会引发错误 -
org.apache.spark.sql.AnalysisException: Cannot resolve column name "1" among (nos);
关于我可能会丢失什么的任何线索?
解决方案
推荐阅读
- google-maps - 商业 API 密钥不起作用:此页面无法正确加载谷歌地图
- mule - DataWeave 2.0 反斜杠转义
- r - 如何从 r 中的数据框中删除“很多”行
- javascript - 如何在 webgl 中使用 uv 纹理包裹空间以制作黑洞
- c# - 使用第三方对象实例化测试代码
- c# - 在内部 .NET Framework 方法中花费的分析时间
- excel - VBA如何从应用程序调用者地址中选择和偏移?
- python - 变量范围和共享“全局”参考数据帧
- json - ColdFusion前缀序列化JSON
- angular - 使用 ngSwitch 而不是 router-outlet,因为在 router-outlet 指令中缺乏对 @Input 的支持