如何从Spark中的列中选择一个值

时间:2019-03-11 08:52:55

标签: java apache-spark dataframe apache-spark-sql

“列”中包含值

C1         C2
1         1235
1         4578
1         4177
2         1427
2         1427
2         1427
2        [{"label":"2 Bed, 1 Bathroom"Woodland Tow]

如果我使用下面的代码

DataFrame df1=df.groupBy("C1").agg(functions.max("C2");

输出给出

  C1        C2
    1        4578
    2        [{"label":"2 Bed, 1 Bathroom"Woodland Tow]

但是我需要

C1        C2
1        4578
2        1427

1 个答案:

答案 0 :(得分:0)

我不是专家,因此更多常识性指导:

DataFrame df1=df.groupBy("C1").agg(functions.max("C2");

显然会调用某个functions.max()实用程序,该实用程序在该列中查找最大值。并且max()为您的字符串值计算出错误的结果。

结论:您可能必须使用其他方法来计算该最大值。我想天真的方法是定义specialMax()

  • 如果列值表示可解析的数字:则解析该数字并将其用于比较
  • 否则,用-1表示该列值

然后使用该specialMax()方法时,您应该获得所需的最大数量。