Операция сортировки Spark Sql не работает должным образом - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь отсортировать фрейм данных с помощью функции sort , но она не сортируется должным образом и кажется, что она сортируется порциями. Может быть, это сортировка отдельных разделов, а не прочесывание сортировки. Однако, где предложение работает нормально

Я также использовал функцию сортировки и простой SQL-запрос, похоже, что ни один из них не работает

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

это вывод, который я получаю:

+----------+
|size_bytes|
+----------+
|  99992576|
|  99978240|
| 999398400|
|  99890176|
|  99851264|
|  99829760|
|  99796992|
| 997171200|
| 997129216|
|  99691520|
+----------+

1 Ответ

1 голос
/ 16 июня 2019

Попробуйте изменить тип на 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, они сортируются в лексикографическом порядке: от 99978240 до 999398400.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...