列排序#

group 排序

枚举

enum class rank_method : int32_t#

用于对列进行排名的平局处理方法。

另请参阅

cudf::make_rank_aggregation 获取更多详细信息。

enumerator FIRST#

稳定排序排名(无平局)

enumerator AVERAGE#

组中第一个元素的平均值

enumerator MIN#

组中第一个元素的最小值

enumerator MAX#

组中第一个元素的最大值

enumerator DENSE#

组之间的排名总是增加1

函数

std::unique_ptr<column> sorted_order(table_view const &input, std::vector<order> const &column_order = {}, std::vector<null_order> const &null_precedence = {}, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

计算能使 input 产生字典序排序的行索引。

参数:
  • input – 要排序的表

  • column_order – 每列所需的排序顺序。大小必须等于 input.num_columns() 或为空。如果为空,所有列将按升序排序。

  • null_precedence – 每列中 null 与其他元素相比所需的顺序。大小必须等于 input.num_columns() 或为空。如果为空,所有列将按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配返回列的设备内存的设备内存资源

返回:

一个非 nullable 的列,包含如果 input 排序后其置换后的行索引

std::unique_ptr<column> stable_sorted_order(table_view const &input, std::vector<order> const &column_order = {}, std::vector<null_order> const &null_precedence = {}, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

计算能使 input 产生稳定字典序排序的行索引。

保证保留等价元素的顺序。

计算能使 input 产生字典序排序的行索引。

参数:
  • input – 要排序的表

  • column_order – 每列所需的排序顺序。大小必须等于 input.num_columns() 或为空。如果为空,所有列将按升序排序。

  • null_precedence – 每列中 null 与其他元素相比所需的顺序。大小必须等于 input.num_columns() 或为空。如果为空,所有列将按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配返回列的设备内存的设备内存资源

返回:

一个非 nullable 的列,包含如果 input 排序后其置换后的行索引

bool is_sorted(cudf::table_view const &table, std::vector<order> const &column_order, std::vector<null_order> const &null_precedence, rmm::cuda_stream_view stream = cudf::get_default_stream())#

检查 table 的行是否按字典序排序。

参数:
  • table – 需要比较行顺序的表

  • column_order – 每列的预期排序顺序。大小必须等于 in.num_columns() 或为空。如果为空,则预期所有列均按升序排列。

  • null_precedence – 每列中 null 与其他元素相比所需的顺序。大小必须等于 input.num_columns() 或为空。如果为空,则假定所有列均按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

返回:

如果按预期排序则为 true,否则为 false

std::unique_ptr<table> sort(table_view const &input, std::vector<order> const &column_order = {}, std::vector<null_order> const &null_precedence = {}, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

对表的行执行字典序排序。

参数:
  • input – 要排序的表

  • column_order – 每列所需的排序顺序。大小必须等于 input.num_columns() 或为空。如果为空,所有列将按升序排序。

  • null_precedenceinput 中每列的 null 元素与其他元素相比所需的顺序。大小必须等于 input.num_columns() 或为空。如果为空,所有列将按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配返回表的设备内存的设备内存资源

返回:

包含 input 所需排序顺序的新表

std::unique_ptr<table> stable_sort(table_view const &input, std::vector<order> const &column_order = {}, std::vector<null_order> const &null_precedence = {}, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

对表的行执行稳定字典序排序。

对表的行执行字典序排序。

参数:
  • input – 要排序的表

  • column_order – 每列所需的排序顺序。大小必须等于 input.num_columns() 或为空。如果为空,所有列将按升序排序。

  • null_precedenceinput 中每列的 null 元素与其他元素相比所需的顺序。大小必须等于 input.num_columns() 或为空。如果为空,所有列将按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配返回表的设备内存的设备内存资源

返回:

包含 input 所需排序顺序的新表

std::unique_ptr<table> sort_by_key(table_view const &values, table_view const &keys, std::vector<order> const &column_order = {}, std::vector<null_order> const &null_precedence = {}, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

执行键值排序。

根据 keys 行的字典序创建一个新表,该表对 values 的行进行重新排序。

抛出:

cudf::logic_error – 如果 values.num_rows() != keys.num_rows()

参数:
  • values – 要重新排序的表

  • keys – 确定排序顺序的表

  • column_orderkeys 中每列所需的排序顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按升序排序。

  • null_precedencekeys 中每列的 null 元素与其他元素相比所需的顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配返回表的设备内存的设备内存资源

返回:

keys 行的字典序确定的 values 的重新排序。

std::unique_ptr<table> stable_sort_by_key(table_view const &values, table_view const &keys, std::vector<order> const &column_order = {}, std::vector<null_order> const &null_precedence = {}, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

执行键值稳定排序。

执行键值排序。根据 keys 行的字典序创建一个新表,该表对 values 的行进行重新排序。

抛出:

cudf::logic_error – 如果 values.num_rows() != keys.num_rows()

参数:
  • values – 要重新排序的表

  • keys – 确定排序顺序的表

  • column_orderkeys 中每列所需的排序顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按升序排序。

  • null_precedencekeys 中每列的 null 元素与其他元素相比所需的顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配返回表的设备内存的设备内存资源

返回:

keys 行的字典序确定的 values 的重新排序。

std::unique_ptr<column> rank(column_view const &input, rank_method method, order column_order, null_policy null_handling, null_order null_precedence, bool percentage, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

计算输入列在排序顺序中的排名。

排名表示每个元素在排序后的列中的位置,排名值从 1 开始。

input = { 3, 4, 5, 4, 1, 2}
Result for different rank_method are
FIRST    = {3, 4, 6, 5, 1, 2}
AVERAGE  = {3, 4.5, 6, 4.5, 1, 2}
MIN      = {3, 4, 6, 4, 1, 2}
MAX      = {3, 5, 6, 5, 1, 2}
DENSE    = {3, 4, 5, 4, 1, 2}
参数:
  • input – 要排名的列

  • method – 用于处理平局(相同值)的排名方法

  • column_order – 排名所需的排序顺序

  • null_handling – 在排名时是否包含 null 的标志。如果 null 未包含,则相应的排名将为 null。

  • null_precedence – 列中 null 与其他元素相比所需的顺序

  • percentage – 将排名转换为范围 (0,1] 内百分比的标志

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配返回列的设备内存的设备内存资源

返回:

一个列,包含 input 列中每个元素的排名。默认情况下,输出列类型将为 size_type 列,当 method=rank_method::AVERAGEpercentage=True 时,输出列类型将为 double

std::unique_ptr<column> segmented_sorted_order(table_view const &keys, column_view const &segment_offsets, std::vector<order> const &column_order = {}, std::vector<null_order> const &null_precedence = {}, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

返回对表中每个段排序后的排序顺序。

如果 segment_offsets 包含大于行数的值,则行为是未定义的。

Example:
keys = { {9, 8, 7, 6, 5, 4, 3, 2, 1, 0} }
offsets = {0, 3, 7, 10}
result = cudf::segmented_sorted_order(keys, offsets);
result is { 2,1,0, 6,5,4,3, 9,8,7 }

如果 segment_offsets 为空或只包含一个索引,则不进行排序,结果是 0 到 keys.size()-1 的整数序列。

不需要 segment_offsets 包含所有索引。任何位于指定段之外的索引将不会被排序。

Example: (offsets do not cover all indices)
keys = { {9, 8, 7, 6, 5, 4, 3, 2, 1, 0} }
offsets = {3, 7}
result = cudf::segmented_sorted_order(keys, offsets);
result is { 0,1,2, 6,5,4,3, 7,8,9 }
抛出:

cudf::logic_error – 如果 segment_offsets 不是 size_type 列。

参数:
  • keys – 确定每个段中元素排序顺序的表

  • segment_offsets – 包含每个连续段起始偏移索引的 size_type 类型的列。

  • column_orderkeys 中每列所需的排序顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按升序排序。

  • null_precedencekeys 中每列的 null 元素与其他元素相比所需的顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配任何返回对象的设备内存资源

返回:

段排序后的表的排序顺序

std::unique_ptr<column> stable_segmented_sorted_order(table_view const &keys, column_view const &segment_offsets, std::vector<order> const &column_order = {}, std::vector<null_order> const &null_precedence = {}, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

返回对表中每个段稳定排序后的排序顺序。

返回对表中每个段排序后的排序顺序。如果 segment_offsets 包含大于行数的值,则行为是未定义的。

Example:
keys = { {9, 8, 7, 6, 5, 4, 3, 2, 1, 0} }
offsets = {0, 3, 7, 10}
result = cudf::segmented_sorted_order(keys, offsets);
result is { 2,1,0, 6,5,4,3, 9,8,7 }

如果 segment_offsets 为空或只包含一个索引,则不进行排序,结果是 0 到 keys.size()-1 的整数序列。

不需要 segment_offsets 包含所有索引。任何位于指定段之外的索引将不会被排序。

Example: (offsets do not cover all indices)
keys = { {9, 8, 7, 6, 5, 4, 3, 2, 1, 0} }
offsets = {3, 7}
result = cudf::segmented_sorted_order(keys, offsets);
result is { 0,1,2, 6,5,4,3, 7,8,9 }
抛出:

cudf::logic_error – 如果 segment_offsets 不是 size_type 列。

参数:
  • keys – 确定每个段中元素排序顺序的表

  • segment_offsets – 包含每个连续段起始偏移索引的 size_type 类型的列。

  • column_orderkeys 中每列所需的排序顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按升序排序。

  • null_precedencekeys 中每列的 null 元素与其他元素相比所需的顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配任何返回对象的设备内存资源

返回:

段排序后的表的排序顺序

std::unique_ptr<table> segmented_sort_by_key(table_view const &values, table_view const &keys, column_view const &segment_offsets, std::vector<order> const &column_order = {}, std::vector<null_order> const &null_precedence = {}, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

对表执行字典序分段排序。

如果 segment_offsets 包含大于行数的值,则行为是未定义的。

Example:
keys = { {9, 8, 7, 6, 5, 4, 3, 2, 1, 0} }
values = { {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'} }
offsets = {0, 3, 7, 10}
result = cudf::segmented_sort_by_key(keys, values, offsets);
result is { 'c','b','a', 'g','f','e','d', 'j','i','h' }

如果 segment_offsets 为空或只包含一个索引,则不进行排序,结果是 values 的副本。

不需要 segment_offsets 包含所有索引。任何位于指定段之外的索引将不会被排序。

Example: (offsets do not cover all indices)
keys = { {9, 8, 7, 6, 5, 4, 3, 2, 1, 0} }
values = { {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'} }
offsets = {3, 7}
result = cudf::segmented_sort_by_key(keys, values, offsets);
result is { 'a','b','c', 'g','f','e','d', 'h','i','j' }
抛出:
参数:
  • values – 要重新排序的表

  • keys – 确定每个段中元素排序顺序的表

  • segment_offsets – 包含每个连续段起始偏移索引的 size_type 类型的列。

  • column_orderkeys 中每列所需的排序顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按升序排序。

  • null_precedencekeys 中每列的 null 元素与其他元素相比所需的顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配任何返回对象的设备内存资源

返回:

表中每个段的元素已排序的表

std::unique_ptr<table> stable_segmented_sort_by_key(table_view const &values, table_view const &keys, column_view const &segment_offsets, std::vector<order> const &column_order = {}, std::vector<null_order> const &null_precedence = {}, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

对表进行稳定分段字典序排序。

对表进行分段字典序排序。如果 `segment_offsets` 包含大于行数的值,则行为未定义。

Example:
keys = { {9, 8, 7, 6, 5, 4, 3, 2, 1, 0} }
values = { {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'} }
offsets = {0, 3, 7, 10}
result = cudf::segmented_sort_by_key(keys, values, offsets);
result is { 'c','b','a', 'g','f','e','d', 'j','i','h' }

如果 segment_offsets 为空或只包含一个索引,则不进行排序,结果是 values 的副本。

不需要 segment_offsets 包含所有索引。任何位于指定段之外的索引将不会被排序。

Example: (offsets do not cover all indices)
keys = { {9, 8, 7, 6, 5, 4, 3, 2, 1, 0} }
values = { {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'} }
offsets = {3, 7}
result = cudf::segmented_sort_by_key(keys, values, offsets);
result is { 'a','b','c', 'g','f','e','d', 'h','i','j' }
抛出:
参数:
  • values – 要重新排序的表

  • keys – 确定每个段中元素排序顺序的表

  • segment_offsets – 包含每个连续段起始偏移索引的 size_type 类型的列。

  • column_orderkeys 中每列所需的排序顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按升序排序。

  • null_precedencekeys 中每列的 null 元素与其他元素相比所需的顺序。大小必须等于 keys.num_columns() 或为空。如果为空,所有列将按 null_order::BEFORE 排序。

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配任何返回对象的设备内存资源

返回:

表中每个段的元素已排序的表