我正在尝试使用 sort 函数对数据框进行排序,但它未正确排序,似乎正在按块排序。也许是对单个分区进行排序,而不是对排序进行梳理。但是where子句可以正常工作
我也使用了sort函数和普通的sql查询,它们似乎都不起作用
[1, 2, 3, 4]
[1, 2, 3, 4, 'last']
这是我得到的输出:
System.setProperty("hadoop.home.dir", "C:\\winutils");
val tempDir = "file:///c:/temp/spark-warehouse"
Logger.getLogger("org").setLevel(Level.ERROR)
// Create a SparkContext using every core of the local machine, named RatingsCounter
val sparkSession = SparkSession
.builder()
.appName("AppStore")
.master("local[2]")
.config("spark.sql.warehouse.dir", tempDir)
.getOrCreate()
var appStoreDF = sparkSession.read.format("csv").option("header", "true").load("../AppleStore.csv")
appStoreDF.show(10)
import org.apache.spark.sql.functions._
appStoreDF.select("size_bytes").sort(desc("size_bytes")).show(10) // Gives unsorted results
答案 0 :(得分:1)
尝试将类型更改为Integer
,然后按预期的顺序进行操作:
appStoreDF
.withColumn("size_bytes", col("size_bytes").cast(sql.types.IntegerType))
.select("size_bytes")
.sort(desc("size_bytes"))
.show(10)
输出:
+----------+
|size_bytes|
+----------+
| 999398400|
| 99978240|
| 99890176|
| ...|
+----------+
size_bytes
列类型为字符串。您可以通过以下方式进行验证:
appStoreDF.select("size_bytes").printSchema // size_bytes: string
当您在desc模式下对字符串进行排序时,它们将按字典顺序进行排序:999978400之前的99978240。