分类字段基于Spark Dataframe中的不同值

塔伦·哈内贾(Tarun khaneja)

在我的源数据中,没有任何可以对数据进行分组的类别列。

因此,我想在Spark数据框中基于另一个列say(“ QNAME”)不同值添加新的自定义类别列。我想在“按透视图”组中使用。

到现在为止,我还不知道...该怎么做。

假设我有以下源数据框

   Qname    b   c   d
    SPT     1   10  555
    MTK     2   20  556
    NKP     3   30  557
    LKM     4   40  558
    SPT     5   50  559     
    MTK     7   70  561
    QRS     6   60  560
    NKP     7   70  561
    SPT     5   50  559
    LKM     7   70  561
    QRS     7   70  561
    MTK     7   70  561
    NKP     7   70  561

因此,基于column(“ QNAME”)值,我想对不同的值组合进行分类。例如,不同的值是(SPT,MTK,NKP,LKM,QRS)...因此,对于该值的第一次出现将被定为“ aaa”,然后第二次出现将被标记为“ bbb”,依此类推。

因此,下面是预期的输出。

  Category         Qname    b   c   d
    "aaa"           SPT     1   10  555
    "aaa"           MTK     2   20  556
    "aaa"           NKP     3   30  557
    "aaa"           LKM     4   40  558
    "bbb"           SPT     5   50  559     
    "bbb"           MTK     7   70  561
    "aaa"           QRS     6   60  560
    "bbb"           NKP     7   70  561
    "ccc"           SPT     5   50  559
    "bbb"           LKM     7   70  561
    "bbb"           QRS     7   70  561
    "ccc"           MTK     7   70  561
    "ccc"           NKP     7   70  561

我正在使用Scala和Spark来做到这一点。任何帮助或建议,以感谢破解。提前致谢!

pasha701

可以使用窗口函数“ row_number()”完成任务。如果考虑到乔纳森·迈尔斯的评论,最好只用数字代替字符:

val df = Seq(
  ("SPT", 1, 10, 555),
  ("MTK", 2, 20, 556),
  ("NKP", 3, 30, 557),
  ("LKM", 4, 40, 558),
  ("SPT", 5, 50, 559),
  ("MTK", 7, 70, 561),
  ("QRS", 6, 60, 560),
  ("NKP", 7, 70, 561),
  ("SPT", 5, 50, 559),
  ("LKM", 7, 70, 561),
  ("QRS", 7, 70, 561),
  ("MTK", 7, 70, 561),
  ("NKP", 7, 70, 561)
).toDF(
  "Qname", "b", "c", "d"
)

// action
val categoryWindow = Window.partitionBy($"Qname").orderBy("c")
val result = df.withColumn("Category", row_number().over(categoryWindow))

结果:

+--------+-----+---+---+---+
|Category|Qname|b  |c  |d  |
+--------+-----+---+---+---+
|1       |SPT  |1  |10 |555|
|1       |NKP  |3  |30 |557|
|1       |QRS  |6  |60 |560|
|1       |LKM  |4  |40 |558|
|1       |MTK  |2  |20 |556|
|2       |NKP  |7  |70 |561|
|2       |LKM  |7  |70 |561|
|2       |QRS  |7  |70 |561|
|2       |SPT  |5  |50 |559|
|2       |MTK  |7  |70 |561|
|3       |NKP  |7  |70 |561|
|3       |MTK  |7  |70 |561|
|3       |SPT  |5  |50 |559|
+--------+-----+---+---+---+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何基于Java中的特定字段值过滤Spark RDD?

基于分类和数值数据的字段值在 R 中编码一个新变量

计算DataFrame中的分类值

如何基于两个不同列中存在的值来转置DataFrame?

Spark DataFrame:计算每列的不同值

如何基于不同模型中其他字段的值设置Django模型字段的值

Python Pandas:使用基于不同列中的分类值的计算创建新列

基于R中不同字段中的值添加新字段的有效方法

如何在Elasticsearch中基于输入字段获取字段的总和值(输入字段和总和输出字段不同)

基于组的不同行中的聚合值

点云中基于不同对象的分类

SQL检查不同字段中的重复值

MongoDB:数组字段中不同值的总数

计算文件中字段的不同值

为 Mongo 中的字段获取不同的值

从AWK字段中打印不同的值

合并不同行中的字段值

如何计算dax中字段的不同值?

比较Scala / Spark中不同键的值

使用dplyr基于多个列中的值范围进行分类

基于分类值的更新函数python

基于列值(measure_type)的具有数据透视和不同聚合的 Spark Dataframe - Scala

基于不同数据框中的值的可变值

基于不同文本输入对 React 中不同字段的过滤

基于列表计算DataFrame中的匹配值

如何基于list()中的对应值替换dataframe()中的值?

Spark:将 UDF 应用于 Dataframe 基于 DF 中的值生成新列

Spark Dataframe组通过将结果分类到列表中

使用 R 从基于另一列中的不同值的列中获取不同值