本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
您可以使用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 ;"