【问题标题】:How Select a value from column in spark如何从火花中的列中选择一个值
【发布时间】:2019-08-01 13:10:34
【问题描述】:

In Column 由值组成

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

【问题讨论】:

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


    【解决方案1】:

    如果您只想找到整数值的最大值,只需先将列转换为“int”,然后再进行分组。

    df.withColumn("C2", col("C2").cast("int")).groupBy("C1").agg(max("C2"))
    

    【讨论】:

      【解决方案2】:

      我不是这里的专家,所以更多的常识指导:

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

      显然调用了一些在该列中查找最大值的functions.max() 实用程序。而max() 会为您的字符串值计算错误的结果。

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

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

      当然后使用 specialMax() 方法时,您应该得到您正在寻找的最大数字。

      【讨论】:

        猜你喜欢
        • 2015-10-04
        • 2020-03-20
        • 2017-04-16
        • 1970-01-01
        • 2018-09-26
        • 2021-08-19
        • 2014-09-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多