lance.LanceDataset.add_columns(转换: dict[str, str] | BatchUDF | ReaderLike | pyarrow.Field | list[pyarrow.Field] | pyarrow.Schema, read_columns: list[str] | None = None, reader_schema: pa.Schema | None = None, batch_size: int | None = None)

使用定义的值添加新列。

有几种方式可以指定新列。首先,可以为每个新列提供SQL表达式。其次,可以提供一个UDF(用户定义函数),该函数接收一批现有数据并返回包含新列的新数据批次。这些新列将被追加到数据集中。

你也可以提供一个RecordBatchReader,它将从某个外部源读取新列的值。当新列的值已经暂存到文件中(通常由某个分布式进程完成)时,这通常很有用。

有关编写UDF的更多信息,请参阅lance.add_columns_udf()装饰器。

Parameters:
transforms : dict or AddColumnsUDF or ReaderLike

如果这是一个字典,那么键是新列的名称,值则是SQL表达式字符串。这些字符串可以引用数据集中的现有列。 如果这是一个AddColumnsUDF,那么它是一个用户定义函数,接收一批现有数据并返回包含新列的新数据批次。 如果这是pyarrow.Fieldpyarrow.Schema,则会以仅元数据操作的方式添加所有具有给定模式的NULL列。

read_columns : list of str, optional

UDF将读取的列名。如果为None,则UDF将读取所有列。仅当transforms是UDF时使用此参数。否则,读取的列将从SQL表达式中推断得出。

reader_schema : pa.Schema, optional

仅当transforms是ReaderLike对象时有效。这将用于确定读取器的模式。

batch_size : int, optional

在应用转换时,每次从源数据集中读取的行数。如果数据集是v1版本,则忽略此参数。

示例

>>> import lance
>>> import pyarrow as pa
>>> table = pa.table({"a": [1, 2, 3]})
>>> dataset = lance.write_dataset(table, "my_dataset")
>>> @lance.batch_udf()
... def double_a(batch):
...     df = batch.to_pandas()
...     return pd.DataFrame({'double_a': 2 * df['a']})
>>> dataset.add_columns(double_a)
>>> dataset.to_table().to_pandas()
   a  double_a
0  1         2
1  2         4
2  3         6
>>> dataset.add_columns({"triple_a": "a * 3"})
>>> dataset.to_table().to_pandas()
   a  double_a  triple_a
0  1         2         3
1  2         4         6
2  3         6         9

另请参阅

LanceDataset.merge

将一组预先计算好的列合并到数据集中。