我想解决以下问题。
我从一个查询中创建了以下Dataframe val temp = spark.sql("select Id, collect_list(from) as letter from f group by Id")
```
|Id| letter|
+-----------+---------------+
| 106| [c]|
| 101| [p]|
| 104|[c, c, c, t, u]|
| 100|[d, t, j, j, c]|
| 110| [p, n, f]|
| 113|[s, c, c, b, ..|
| 115|[u, s, t, c, ..|
| 11| [c, c, i, s]|
| 117| [d, d, p, s]|
| 118|[a, s, c, t, ..|
| 123| [d, n]|
| 125| [n, b]|
| 128| [c]|
| 131| [c, t, c, u]|
| 132| [c, u, i]|
| 134|[c, p, j, u, c]|
| 136|[b, a, t, n, c]|
| 137| [b, a]|
| 138| [b, t, c]|
| 141| [s]|
我想创建一个名为“n”的新列此列将包含一个数值,该数值表示在“c”出现之前单元格中最长的字母序列。最长的序列可以在列表中的任何位置。
例如,本节的“解决方案”列(假设没有任何内容被….截断)将为 `0, 1, 3, 5, 3, 2, 4, 4, 4, 4, 2, 2, 1, 4, 2, 5, 5, 2, 3, 1` 到目前为止,我已经尝试实现这个解决方案,但它没有工作,因为解决方案是在一个列表,而不是一个Dataframe。
scala函数来统计特定的事件
任何帮助都将不胜感激。谢谢您!
2条答案
按热度按时间cclgggtu1#
下面是如何使用Spark
functions
,可以使用spark转换给定的scala函数functions
如下所示输出:
j2datikz2#
您可以编写一个用户定义函数(udf)来计算所需的内容。有很多方法可以计算最长的序列。一个简单的方法是在
"co"
,计算每个子序列的大小并取最大值。这就产生了