タイトル以上でも以下でもありません。個人的あるあるなんですが、たまにしか引っかからない分、毎回原因に気づくまでに時間がかかるんですよね、、、、
どういうことかと言いますと、
こんな感じのデータがありまして、、、、
id | payment | |
---|---|---|
0 | aaa | 10000 |
1 | bbb | 2000 |
2 | ccc | 1500 |
df.show()
+---+-------+ | id|payment| +---+-------+ |aaa| 10000| |bbb| 2000| |ccc| 1500| +---+-------+
ソートします
できてないんだが。
df.sort("payment").show()
+---+-------+ | id|payment| +---+-------+ |aaa| 10000| |ccc| 1500| |bbb| 2000| +---+-------+
よく見たら文字型になってました
てへぺろってやつです。文字型の場合、左の文字から参照してソートするので、数字と同じような順序にはならんわけですね。
df.printSchema()
root
|-- id: string (nullable = true)
|-- payment: string (nullable = true)
ちゃんと数値にしてソートします
当然、ちゃんとソートできます。
# 数値型に型変換 df_cast = df.withColumn("payment", fn.col("payment").cast("int")) df_cast.sort("payment").show()
+---+-------+ | id|payment| +---+-------+ |ccc| 1500| |bbb| 2000| |aaa| 10000| +---+-------+
おわりに
これ、文字列のままソートしてもデータによってはぱっと見で違和感がなく、気づきにくかったりするので結構怖いんですよね。ソート云々以前に、変数の型はちゃんと狙い通りに定義しておきましょうって話です。