メインコンテンツまでスキップ

範囲による再分割

指定されたパーティショニング式に基づいてパーティション分割された新しいDataFrameを返します。結果として得られるDataFrameは、範囲分割されています。

構文

repartitionByRange(numPartitions: Union[int, "ColumnOrName"], *cols: "ColumnOrName")

パラメーター

パラメーター

Type

説明

numPartitions

int

パーティションの目標数を指定するための整数、または列を指定できます。それが列である場合、最初のパーティショニング列として使用されます。指定がない場合は、デフォルトのパーティション数が使用されます。

cols

文字列または列

パーティショニング列。

戻り値

DataFrame: 再分割されたDataFrame 。

注意

少なくとも1つのパーティション分割式を指定する必要があります。明示的なソート順が指定されていない場合は、「昇順でNULL値を優先」とみなされます。

パフォーマンス上の理由から、この方法はサンプリングを用いて範囲を推定します。したがって、サンプリングによって異なる値が返される可能性があるため、出力は一貫していない可能性があります。サンプルサイズは設定spark.sql.execution.rangeExchange.sampleSizePerPartitionで制御できます。

Python
from pyspark.sql import functions as sf
spark.createDataFrame(
[(14, "Tom"), (23, "Alice"), (16, "Bob")], ["age", "name"]
).repartitionByRange(2, "age").select(
"age", "name", sf.spark_partition_id()
).show()
# +---+-----+--------------------+
# |age| name|SPARK_PARTITION_ID()|
# +---+-----+--------------------+
# | 14| Tom| 0|
# | 16| Bob| 0|
# | 23|Alice| 1|
# +---+-----+--------------------+