在Scala中的Spark数据帧的每一行中查找最大值

普里亚米

我有一个spark-dataframe名为的输入df

+---------------+---+---+---+---+
|     CustomerID| P1| P2| P3| P4|
+---------------+---+---+---+---+
|         725153|  5|  6|  7|  8|
|         873008|  7|  8|  1|  2|
|         725116|  5|  6|  3|  2|
|         725110|  0|  1|  2|  5|
+---------------+---+---+---+---+

其中,P1,P2,P3,P4我需要为每个CustomerID. 并获得等价物column name并将其放入df.So 所以我的结果dataframe应该是,

+---------------+----+----+
|     CustomerID|col1|col2|
+---------------+----+----+
|         725153|  P4|  P3|
|         873008|  P2|  P1|
|         725116|  P2|  P1|
|         725110|  P4|  P3|
+---------------+----+----+

这里为第一行,8并且7是最大值。每个等效的列名称是P4P3因此,对于它的特殊性CustomerID,它应该包含值P4P3这可以pyspark通过使用pandas数据框来实现

nlargest = 2
order = np.argsort(-df.values, axis=1)[:, :nlargest]
result = pd.DataFrame(df.columns[order],columns=['top{}'.format(i) for i in range(1, nlargest+1)],index=recommend_df.index)

但是我怎样才能做到这一点scala呢?

文德夫

您可以使用UDF来获得您想要的结果。UDFzip所有的各自的值的列名,然后排序Array按价值终于从它返回前两名列名。下面是相同的代码。

//get all the columns that you want
val requiredCol = df.columns.zipWithIndex.filter(_._2!=0).map(_._1) 
//define a UDF which sorts according to the value and returns top two column names
val topTwoColumns = udf((seq: Seq[Int]) =>
  seq.zip(requiredCol).
    sortBy(_._1)(Ordering[Int].reverse).
    take(2).map(_._2))

现在,您可以使用withColumn列值并将其array作为先前定义的 UDF传递

df.withColumn("col", topTwoColumns(array(requiredCol.map(col(_)):_*))).
  select($"CustomerID",
    $"col".getItem(0).as("col1"),
    $"col".getItem(1).as("col2")).show

//output
//+----------+----+----+
//|CustomerID|col1|col2|
//+----------+----+----+
//|    725153|  P4|  P3|
//|    873008|  P2|  P1|
//|    725116|  P2|  P1|
//|    725110|  P4|  P3|
//+----------+----+----+

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在python数据框中的每一行中查找最大值

来自分类Dev

在2D数组C ++中查找每一行的最大值

来自分类Dev

查找csv文件中每一行的最大值

来自分类Dev

数据帧对每一行的最大值进行归一化

来自分类Dev

当python的一行中有多个最大值时,在2-dim向量的每一行中查找最大值

来自分类Dev

查找数据帧中每一行的出现次数

来自分类Dev

修改数据帧每一行中的值

来自分类Dev

如何在二维数组(矩阵)中查找每一行的最大值C#

来自分类Dev

计算R中每一行中特定列的后3行最大值

来自分类Dev

计算Python中每一行中特定列的下3行的最大值

来自分类Dev

如何获得最大 基于数据帧中其他列的值,每一行的n周期值?

来自分类Dev

从 Scala/spark 中时间戳的数据帧列中获取最大值

来自分类Dev

找出r中列表中每一行的最大值?

来自分类Dev

r中数据帧不同行的每一列的最大值

来自分类Dev

许多行中每一行的最大值的条件格式

来自分类Dev

用循环替换无输出的numpy数组每一行中的最大值

来自分类Dev

VBA:突出显示各列中每一行的最大值(已解决)

来自分类Dev

UPDATE列,其中不包含PL / SQL的oracle中每一行的最大值

来自分类Dev

根据另一行中的值查找字段的最大值

来自分类Dev

大熊猫:查找列名和值,每一行的最大值(和第二最大值)

来自分类Dev

熊猫:查找列名和值,每一行的最大值(和第二最大值)

来自分类Dev

在R中的时间序列数据中的每一行中创建最后两行具有最大值的不同列

来自分类Dev

Scala:从每一行传递数据帧的元素并在单独的行中返回结果

来自分类Dev

在 R 中为 DF 中的每一行找到最大的最大值和第二大的最大值

来自分类Dev

计算R中数据帧每一行中连续出现的特定值

来自分类Dev

在R中的每一行中找到前一行到后一行的值的最大值

来自分类常见问题

查找具有每一行最大值的列名

来自分类Dev

根据列中的正则表达式语法,将变量添加到包含每一行最大值的数据框中

来自分类Dev

如何有效地在Pyspark的数据帧的每一列上为每个最小值或最大值获取一行?

Related 相关文章

  1. 1

    在python数据框中的每一行中查找最大值

  2. 2

    在2D数组C ++中查找每一行的最大值

  3. 3

    查找csv文件中每一行的最大值

  4. 4

    数据帧对每一行的最大值进行归一化

  5. 5

    当python的一行中有多个最大值时,在2-dim向量的每一行中查找最大值

  6. 6

    查找数据帧中每一行的出现次数

  7. 7

    修改数据帧每一行中的值

  8. 8

    如何在二维数组(矩阵)中查找每一行的最大值C#

  9. 9

    计算R中每一行中特定列的后3行最大值

  10. 10

    计算Python中每一行中特定列的下3行的最大值

  11. 11

    如何获得最大 基于数据帧中其他列的值,每一行的n周期值?

  12. 12

    从 Scala/spark 中时间戳的数据帧列中获取最大值

  13. 13

    找出r中列表中每一行的最大值?

  14. 14

    r中数据帧不同行的每一列的最大值

  15. 15

    许多行中每一行的最大值的条件格式

  16. 16

    用循环替换无输出的numpy数组每一行中的最大值

  17. 17

    VBA:突出显示各列中每一行的最大值(已解决)

  18. 18

    UPDATE列,其中不包含PL / SQL的oracle中每一行的最大值

  19. 19

    根据另一行中的值查找字段的最大值

  20. 20

    大熊猫:查找列名和值,每一行的最大值(和第二最大值)

  21. 21

    熊猫:查找列名和值,每一行的最大值(和第二最大值)

  22. 22

    在R中的时间序列数据中的每一行中创建最后两行具有最大值的不同列

  23. 23

    Scala:从每一行传递数据帧的元素并在单独的行中返回结果

  24. 24

    在 R 中为 DF 中的每一行找到最大的最大值和第二大的最大值

  25. 25

    计算R中数据帧每一行中连续出现的特定值

  26. 26

    在R中的每一行中找到前一行到后一行的值的最大值

  27. 27

    查找具有每一行最大值的列名

  28. 28

    根据列中的正则表达式语法,将变量添加到包含每一行最大值的数据框中

  29. 29

    如何有效地在Pyspark的数据帧的每一列上为每个最小值或最大值获取一行?

热门标签

归档