scala - 将 Dataframe 的列转换为 Seq[Columns] Scala
问题描述
我正在尝试进行下一个操作:
var test = df.groupBy(keys.map(col(_)): _*).agg(sequence.head, sequence.tail: _*)
我知道 agg 中的必需参数应该是Seq[Columns]
.
然后我有一个包含下一个数据框“expr”:
sequences
count(col("colname1"),"*")
count(col("colname2"),"*")
count(col("colname3"),"*")
count(col("colname4"),"*")
列序列是字符串类型,我想使用每一行的值作为 的输入agg
,但我无法达到这些值。
知道如何尝试吗?
解决方案
如果能把sequences
列中的字符串改成SQL命令,就可以解决了。Spark 提供了一个函数expr
,它接受一个 SQL 字符串并将其转换为一列。具有工作命令的示例数据框:
val df2 = Seq("sum(case when A like 2 then A end) as A", "count(B) as B").toDF("sequences")
要将数据帧转换为Seq[Column]
s,请执行以下操作:
val seqs = df2.as[String].collect().map(expr(_))
然后groupBy
和agg
:
df.groupBy(...).agg(seqs.head, seqs.tail:_*)
推荐阅读
- python-3.x - 如何在默认情况下选择单选按钮更改 tkinter 中的某些选项?
- python - 绘制两个数据框列,第三个作为 x 轴
- php - 避免 Doctrine 返回完整的相关实体
- javascript - 从 Next JS 页面中的多个 airtable 库循环
- azure-functions - 在 Azure 持久函数更改状态时获取事件
- python - 比较两个列表并在字典中获取匹配结果 - python
- python - 如何逐个字符比较 2 个不同的字符串,看看有多少数字匹配?
- soap - WSDL 服务位置基础 URL 在每个环境中会有所不同,以及如何不一遍又一遍地构建同一个 jar
- node.js - 如何避免 Node.js 的 process.send 出现竞争条件?
- python - 分类数据的全局自相关统计?