变换 Transform#

group Transform

函数

std::unique_ptr<column> transform(std::vector<column_view> const &inputs, std::string const &transform_udf, data_type output_type, bool is_ptx, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

通过对输入列的每个元素应用变换函数来创建一个新列。

计算:out[i] = F(inputs[i]...)

注意,对于 inputs 中的每个标量(大小为 1 的列),input[i] == input[0]

输出空值掩码与输入列的空值掩码相同,因此如果 input[i] 为空,则 output[i] 也为空。结果列的大小是最大输入列的大小。所有输入列必须具有等效的空值掩码。

参数:
  • inputs – 要变换的输入列的不可变视图

  • transform_udf – 要应用的变换函数的 PTX/CUDA 字符串

  • output_type – 与 UDF 中的输出类型兼容的输出类型

  • is_ptx – true: UDF 被视为 PTX 代码;false: UDF 被视为 CUDA 代码

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

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

返回:

通过对输入的每个元素应用变换函数而得到的列

std::pair<std::unique_ptr<rmm::device_buffer>, size_type> nans_to_nulls(column_view const &input, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

通过将 NaN 转换为 null 并保留现有 null 值,从 input 创建一个 null_mask,并返回新的 null_count。

抛出:

cudf::logic_error – 如果 input.type() 是非浮点类型

参数:
  • input – 浮点类型的输入列的不可变视图

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

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

返回:

一个 pair,包含一个新的位掩码 device_buffer 及其通过将 input 中的 NaN 替换为 null 获得的 null 计数。

std::unique_ptr<column> compute_column(table_view const &table, ast::expression const &expr, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

通过对表中的表达式树求值来计算新列。

这会计算表中的表达式以产生一个新列。也称为 n 元变换。

抛出:

cudf::logic_error – 如果传入的表达式操作的是 table_reference::RIGHT

参数:
  • table – 用于表达式求值的表

  • expr – 表达式树的根

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

  • mr – 设备内存资源

返回:

输出列

std::pair<std::unique_ptr<rmm::device_buffer>, cudf::size_type> bools_to_mask(column_view const &input, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

从布尔元素列创建位掩码。

对于 [begin_bit, end_bit) 中的每个位返回一个 bool 值。如果在最低有效位编号中位 i 被设置 (1),则输出中的元素 itrue,否则为 false

抛出:

cudf::logic_error – 如果 input.type() 是非布尔类型

参数:
  • input – 要转换为位掩码的布尔元素

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

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

返回:

一个 pair,包含一个新的位掩码 device_buffer 及其从 input 获得的 null 计数,其中 true 表示 valid (1`),false 表示 invalid (0)。

std::pair<std::unique_ptr<cudf::table>, std::unique_ptr<cudf::column>> encode(cudf::table_view const &input, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

将给定表的行编码为整数。

编码后的值是范围 [0, n) 内的整数,其中 n 是输入表中不同行的数量。结果表满足 keys[result[i]] == input[i],其中 keys 是包含输入表中按升序排序的不同行的表。如果存在 null,它们会被排序到 keys 表的末尾。

示例

input: [{'a', 'b', 'b', 'a'}]
output: [{'a', 'b'}], {0, 1, 1, 0}

input: [{1, 3, 1, 2, 9}, {1, 2, 1, 3, 5}]
output: [{1, 2, 3, 9}, {1, 3, 2, 5}], {0, 2, 0, 1, 3}

参数:
  • input – 包含要编码值的表

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

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

返回:

一个 pair,包含输入表中按排序顺序排列的不同行,以及一个表示编码行的整数索引列。

std::pair<std::unique_ptr<column>, table_view> one_hot_encode(column_view const &input, column_view const &categories, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

通过为 categories 中的每个值生成一个新列来编码 input,新列指示该值是否存在于 input 中。

生成的每类别列被连接在一起作为单个列返回,并通过 table_view 进行查看。

如果 input[i] == categories[j],则输出表中第 i 行第 j 列等于 1,否则为 0。

如果 input[i] == categories[j],则输出表中第 i 行第 j 列等于 1,否则为 0。

示例

input: [{'a', 'c', null, 'c', 'b'}]
categories: ['c', null]
output: [{0, 1, 0, 1, 0}, {0, 0, 1, 0, 0}]

抛出:

cudf::logic_error – 如果 input 和 categories 的类型不同。

参数:
  • input – 包含要编码值的列

  • categories – 包含类别的列

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

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

返回:

一个 pair,包含所有编码数据的 owner 和数据的表视图

std::unique_ptr<column> mask_to_bools(bitmask_type const *bitmask, size_type begin_bit, size_type end_bit, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

从给定的位掩码创建布尔列。

对于 [begin_bit, end_bit) 中的每个位返回一个 bool 值。如果在最低有效位编号中位 i 被设置 (1),则输出中的元素 itrue,否则为 false

示例

input: {0b10101010}
output: [{false, true, false, true, false, true, false, true}]

抛出:
参数:
  • bitmask – 指向需要转换的位掩码的设备指针

  • begin_bit – 转换应开始的位的索引位置

  • end_bit – 转换应停止的位之前的索引位置

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

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

返回:

一个布尔列,表示来自 [begin_bit, end_bit) 的给定掩码

std::unique_ptr<column> row_bit_count(table_view const &t, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

返回 table_view 中所有列的每行近似累积位大小。

此函数计算位而不是字节,以考虑每行只有一个位的空值掩码。

返回列中的每一行是表中每列的每行大小的总和。

在某些情况下,这只是一个近似值。特别是,列表和字符串列需要 N+1 个偏移量来表示 N 行。调用者需要计算任何被考虑的行组的终止偏移量带来的少量额外开销。

此函数返回按当前列形成方式计算的每行大小。这可能大于通过收集行获得的大小。具体来说,结构体列有效性掩码的下推可以使包含字符串或列表列数据的行无效。在这些情况下,返回的大小是保守的。

row_bit_count(column(x)) >= row_bit_count(gather(column(x)))

参数:
  • t – 要执行计算的表视图

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

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

返回:

包含每行位数的 32 位整数列

std::unique_ptr<column> segmented_row_bit_count(table_view const &t, size_type segment_length, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

返回 table_view 中所有列的每个行段的近似累积位大小。

这类似于在 cudf::row_bit_count 中计算输入表的每行位大小,不同之处在于行大小是按段累积的。

目前仅支持固定长度的段。如果输入表的行数不能被 segment_length 整除,则将其最后一段视为比其他段短。

抛出:

std::invalid_argument – 如果输入 segment_length 为非正数或大于输入表中的行数。

参数:
  • t – 要执行计算的表视图

  • segment_length – 计算总大小的每个段中的行数

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

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

返回:

包含每个行段位数的 32 位整数列