本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
您可以使用TableWriter API对MaxCompute表进行读写。
公共云GPU服务器即将过保下线,您可以继续提交CPU版本的TensorFlow任务。如需使用GPU进行模型训练,请前往DLC提交任务,具体操作请参见创建训练任务。
读写MaxCompute表的功能由tensorflow.python_io.TableWriter提供,可以在TensorFlow的Graph执行逻辑以外,直接对MaxCompute表进行操作。
PAI-TF作业执行过程中,写入MaxCompute表的数据,必须在作业正常结束以后,才能通过TableWriter API访问。如果作业正在运行或异常退出,则无法访问。
创建Writer并打开表
初始化TableWriter将打开一个MaxCompute表并返回Writer对象。接口定义如下。
writer = tf.python_io.TableWriter(table, slice_id=0)
table:string类型,表示需要打开的MaxCompute表名。该参数需要与PAI命令-Doutput中的输出表名一致,否则系统报
table xxx not predefined
错误。slice_id:int类型,表示在表的不同分区进行写入,避免写冲突。单机场景下,使用默认值0即可。分布式场景下,如果多个worker(包括PS)同时使用相同的slice_id写入数据,则会导致写入失败。
每次打开一张表,相当于打开一张空表,即原表中的数据被清空。
写入记录
将数据写入已打开表的对应列,该写入数据必须在关闭表之后才能读取。接口定义如下。
writer.write(values, indices)
values:表示写入的单行或多行数据。
如果写入单行数据,则传入一个由标量组成的Tuple、List或1D-Ndarray。其中List和1D-Ndarray表示写入的各列数据类型相同。
如果写入N(N>=1)行数据,则传入一个List或1D-Ndarray,参数中的每个元素对应一个单行数据(Tuple、List或以Structure为元素的Ndarray)。
indices:表示数据写入的列,支持由整型index组成的Tuple、List或1D-Ndarray类型。indices中的每个数对应表的每一列(列数从0开始计算)。
关闭表
接口定义如下。
writer.close()
在with
语句块中,无需显示调用close()
关闭表。
关闭表之后,如果使用open
命令重新打开表,则表中原数据被清空。
通过with语句使用TableWriter
TableWriter支持通过with
语句管理上下文,示例代码如下。
with tf.python_io.TableWriter(table) as writer:
# Prepare values for writing.
writer.write(values, incides)
# Table would be closed automatically outside this section,
示例
在project中新建一张含有4列元素的MaxCompute表test_write,表的列名及数据类型如下。
具体操作,请参见创建并使用MaxCompute表。
ColumnName
ColumnType
uid
bigint
name
string
price
double
virtual
bool
使用Python命令,并配置-Doutputs为odps://project/tables/test_write,将如下表格中的数据写入test_write表。
uid
name
price
virtual
25
"Apple"
5.0
False
38
"Pear"
4.5
False
17
"Watermelon”
2.2
False
# table_writer_test.py文件。 import tensorflow as tf # Prepare data, 准备数据。 values = [(25, "Apple", 5.0, False), (38, "Pear", 4.5, False), (17, "Watermelon", 2.2, False)] # Open a table,打开一个表并返回writer对象。 writer = tf.python_io.TableWriter("odps://project/tables/test") # Write records to the 0~3 columns of the table,将数据写入表的第0~3列。 records = writer.write(values, indices=[0, 1, 2, 3]) # Close the table,关闭表和Writer。 writer.close()
提交任务至PAI-TF,并执行任务。
$ odpscmd -e "pai -name tensorflow140 -Dscript=<absolute_path_of_script>/table_writer_test.py -Doutputs=odps://project/tables/test_write ;"