Spark Dataframe ORDER BY给出混合组合(asc + desc)

问题描述 投票:-2回答:1

我有一个数据框,如果计数值大于10,我想通过降序对列进行排序。但是我得到了一些混合的组合,例如,上升了几条记录,然后又下降了,然后又上升了。我正在使用orderBy()函数,该函数默认对记录进行升序排列。由于我是Scala和Spark的新手,所以我没有得到我得到它的原因。

df.groupBy("Value").count().filter("count>5.0").orderBy("Value").show(1000);

读取csv

val df = sparkSession
    .read
    .option("header", "true")
    .option("inferSchema", "true")
    .csv("src/main/resources/test.csv")
    .toDF("Country_Code", "Country","Data_Source","Data_File","Category","Metric","Time","Data_Cut1","Option1_Dummy","Option1_Visible","Value")````

我通过执行上述语法获得的记录:

+-------+-----+
|  Value|count|
+-------+-----+
|      0|  225|
|   0.01|   12|
|   0.02|   13|
|   0.03|   12|
|   0.04|   15|
|   0.05|    9|
|   0.06|   11|
|   0.07|    9|
|   0.08|    6|
|   0.09|   10|
|    0.1|   66|
|   0.11|   12|
|   0.12|    9|
|   0.13|   12|
|   0.14|    8|
|   0.15|   10|
|   0.16|   14|
|   0.17|   11|
|   0.18|   14|
|   0.19|   21|
|    0.2|   78|
|   0.21|   16|
|   0.22|   15|
|   0.23|   13|
|   0.24|    7|
|    0.3|   85|
|   0.31|    7|
|   0.34|    8|
|    0.4|   71|
|    0.5|  103|
|    0.6|  102|
|   0.61|    6|
|   0.62|    9|
|   0.69|    7|
|    0.7|   98|
|   0.72|    6|
|   0.74|    8|
|   0.78|    7|
|    0.8|   71|
|   0.81|   10|
|   0.82|    9|
|   0.83|    8|
|   0.84|    6|
|   0.86|    8|
|   0.87|   10|
|   0.88|   12|
|    0.9|   95|
|   0.91|    9|
|   0.93|    6|
|   0.94|    6|
|   0.95|    8|
|   0.98|    8|
|   0.99|    6|
|      1|  254|
|   1.08|    8|
|    1.1|   80|
|   1.11|    6|
|   1.15|    9|
|   1.17|    7|
|   1.18|    6|
|   1.19|    9|
|    1.2|   94|
|   1.25|    7|
|    1.3|   91|
|   1.32|    8|
|    1.4|  215|
|   1.45|    7|
|    1.5|  320|
|   1.56|    6|
|    1.6|  280|
|   1.64|    6|
|   1.66|   10|
|    1.7|  310|
|   1.72|    7|
|   1.74|    6|
|    1.8|  253|
|    1.9|  117|
|     10|   78|
|   10.1|   45|
|   10.2|   49|
|   10.3|   30|
|   10.4|   40|
|   10.5|   38|
|   10.6|   52|
|   10.7|   35|
|   10.8|   39|
|   10.9|   42|
|  10.96|    7|------------mark
|    100|  200|
|  101.3|    7|
|  101.8|    8|
|    102|    6|
|  102.2|    6|
|  102.7|    8|
|  103.2|    6|--------------here
|     11|   93|
|   11.1|   32|
|   11.2|   38|
|  11.21|    6|
|   11.3|   42|
|   11.4|   32|
|   11.5|   34|
|   11.6|   38|
|  11.69|    6|
|   11.7|   42|
|   11.8|   25|
|  11.86|    6|
|   11.9|   39|
|  11.96|    9|
|     12|  108|
|  12.07|    7|
|   12.1|   31|
|  12.11|    6|
|   12.2|   34|
|   12.3|   28|
|  12.39|    6|
|   12.4|   32|
|   12.5|   31|
|  12.54|    7|
|  12.57|    6|
|   12.6|   18|
|   12.7|   33|
|   12.8|   20|
|   12.9|   21|
|     13|   85|
|   13.1|   25|
|   13.2|   19|
|   13.3|   30|
|  13.34|    6|
|   13.4|   32|
|   13.5|   16|
|   13.6|   15|
|   13.7|   31|
|   13.8|    8|
|  13.83|    7|
|  13.89|    7|
|     14|   46|
|   14.1|   10|
|   14.3|   10|
|   14.4|    7|
|   14.5|   15|
|   14.7|    6|
|   14.9|   11|
|     15|   52|
|   15.2|    6|
|   15.3|    9|
|   15.4|   12|
|   15.5|   21|
|   15.6|   11|
|   15.7|   14|
|   15.8|   18|
|   15.9|   18|
|     16|   44|
|   16.1|   30|
|   16.2|   26|
|   16.3|   29|
|   16.4|   26|
|   16.5|   32|
|   16.6|   42|
|   16.7|   44|
|  16.72|    6|
|   16.8|   40|
|   16.9|   54|
|     17|   58|
|   17.1|   48|
|   17.2|   51|
|   17.3|   47|
|   17.4|   57|
|   17.5|   51|
|   17.6|   51|
|   17.7|   46|
|   17.8|   33|
|   17.9|   38|---------again
|1732.04|    6|
|     18|   49|
|   18.1|   21|
|   18.2|   23|
|   18.3|   29|
|   18.4|   22|
|   18.5|   22|
|   18.6|   17|
|   18.7|   13|
|   18.8|   13|
|   18.9|   19|
|     19|   36|
|   19.1|   15|
|   19.2|   13|
|   19.3|   12|
|   19.4|   15|
|   19.5|   15|
|   19.6|   15|
|   19.7|   15|
|   19.8|   14|
|   19.9|    9|
|      2|  198|------------see after 19 again 2 came
|   2.04|    7|
|   2.09|    8|
|    2.1|   47|
|   2.16|    6|
|   2.17|    8|
|    2.2|   55|
|   2.24|    6|
|   2.26|    7|
|   2.27|    6|
|   2.29|    8|
|    2.3|   53|
|    2.4|   33|
|    2.5|   36|
|   2.54|    6|
|   2.59|    6|

你能告诉我我在做什么错。我的数据框有列

"Country_Code", "Country","Data_Source","Data_File","Category","Metric","Time","Data_Cut1","Option1_Dummy","Option1_Visible","Value"
scala apache-spark
1个回答
1
投票

正如我们在评论中提到的,看来您的Value列是String类型的。您可以将其转换为Double(例如)以对其进行数字排序。

此行会将值列强制转换为doubleType:

import org.apache.spark.sql.types._

df.withColumn("Value", $"Value".cast(DoubleType))

示例输入

df.show
+-----+-------+
|Value|another|
+-----+-------+
| 10.0|      b|
|    2|      a|
+-----+-------+

以值作为字符串

df.orderBy($"Value").show
+-----+-------+
|Value|another|
+-----+-------+
| 10.0|      b|
|    2|      a|
+-----+-------+

铸造值为双精度

df.withColumn("Value", $"Value".cast(DoubleType)).orderBy($"Value").show
+-----+-------+
|Value|another|
+-----+-------+
|  2.0|      a|
| 10.0|      b|
+-----+-------+
© www.soinside.com 2019 - 2024. All rights reserved.