-
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.Field或pyarrow.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将一组预先计算好的列合并到数据集中。