本篇文章主要分享在華爲雲NAIE的數據服務中,進行數據入湖、數據處理。
目錄
數據入湖
簡介
我們在華爲雲NAIE開通“數據資產管理服務”後,把數據上傳到數據湖OBS中。其中數據可以從本地文件、租戶OBS、數據湖OBS、HIVE、DWS等方式上傳。
流程
1)先準備數據,以.csv爲後綴的文件;(本文中使用本地文件上傳)
2)進入數據資產管理服務,選擇“治理工具”下面的“數據加載”,把本地的數據上傳數據到湖OBS中。
特點
1)數據輸入端:本地文件、租戶OBS、數據湖OBS、HIVE、DWS等方式;
2)數據生成端:數據湖OBS。
數據資產管理服務 頁面
進入服務;
選擇“治理工具”下面的“數據加載”,點擊“創建任務”
關於上傳數據湖OBS的路徑,可以根據實際情況選擇,記得就好,後面要用到的哈。
注意:數據輸入端:本地文件、租戶OBS、數據湖OBS、HIVE、DWS等方式;根據實際情況選擇哈。
如果想體驗一下,可以到網盤拿數據放到本地來上傳,鏈接:https://pan.baidu.com/s/1KZiGw1_3EFnYBSKzp4VVlQ 提取碼:ifcj
點擊底下的連接測試,當兩端都連通後,可以點擊“提交”
查看狀態,在運行中,等待一會變成運行成功,就可以啦。
數據處理
簡介
上傳到數據湖OBS數據,進行處理;比如數據清洗,數據過濾,增刪數據等,也可以進行讀寫OBS的基本方法、參數的添加和使用。
特點
1)使用Python語言進行處理的
2)線上填寫代碼;
3)支持不同的引擎框架(Horovod、MXNet、PyTorch、Ray、Spark_MLlib、TensorFlow、XGBoost-Sklearn),Python版本來運行;
操作流程
來到“數據處理”,點擊“新增作業”
創建作業:填寫名稱、選擇作業位置等
點擊“下一步”,
main.py是官方的實例代碼,作用:演示讀寫OBS的基本方法、參數的添加和使用方法
參考鏈接:https://github.com/huaweicloud/ModelArts-Lab/blob/master/docs/moxing_api_doc/MoXing_API_File.md
"""
Sample Code, you can delete this file. Or clear this file content.
Execution engine suggests choosing TensorFlow/MXNet/PyTorch.
Python version 3.6 or higher.
Functional description
1. Parsing running parameters. See function argument_init
2. Reading csv file from OBS. See function read_from_obs
3. Writing data to OBS. See function read_from_obs
moxing API document [https://github.com/huaweicloud/ModelArts-Lab/blob/master/docs/moxing_api_doc/MoXing_API_File.md]
"""
import argparse
import logging
import os
import pandas as pd
# Adapt to ModelArts runtime environment
try:
import moxing as mox
mox.file.shift('os', 'mox')
except (ModuleNotFoundError, AttributeError):
mox = None
logging.info(
'Not exist moxing module. if running on modelarts engine. please select TensorFlow engine. Python Version is 3.6')
def argument_init():
"""
Parsing running parameters.
:return: Running params
"""
logging.info('Start to init running argument...')
parser = argparse.ArgumentParser(description="pm data process")
parser.add_argument('--data_url', type=str, default='s3://bucket_name/folder/', help='System preset parameters.')
parser.add_argument('--train_url', type=str, default='s3://bucket_name/folder/', help='System preset parameters.')
parser.add_argument('--input_path', type=str, default=None, help='User-defined parameter example.')
parser.add_argument('--output_path', type=str, default=None, help='User-defined parameter example.')
return parser.parse_known_args()
def read_from_obs(input_path):
"""
Reading csv file from OBS
:param input_path: OBS path. such as s3://bucket/folder/
:return: data frame
"""
logging.info('start to read file from OBS. input_path=%s' % input_path)
if input_path is None or input_path.endswith('s3://'):
logging.error('input_path is None or not endswith s3://')
return
if not os.path.exists(input_path):
logging.warning('input_path is not exists.')
return None
data_frame = None
for file_name in os.listdir(input_path):
if not file_name.endswith('.csv'):
logging.info('%s is not csv file.' % file_name)
continue
with open(os.path.join(input_path, file_name), 'rb') as f:
data_frame = pd.read_csv(f, encoding='utf-8')
logging.info('success read file. file_name=%s' % file_name)
break
return data_frame
def data_process(data_frame_before_process):
"""
User-defined data processing function
:param data_frame: pandas data frame
:return: Processed data frame
"""
logging.info('start to process data...')
# Start of your own processing code.
# Write your own processing code here.
# End of your own processing code.
logging.info('end to process data...')
return data_frame_after_process
def write_to_obs(data_frame, output_path):
"""
Writing data to OBS.
:param data_frame: pandas data frame
:param output_path: OBS Path. such as s3://bucket/folder/
:return: None
"""
logging.info('start to writing data to OBS. output_path=%s' % output_path)
if data_frame is None:
logging.warning('data_frame is None.')
return
if output_path is None or output_path.endswith('s3://'):
logging.error('output_path is None or not endswith s3://')
return
if not os.path.exists(output_path):
os.makedirs(output_path)
data_frame.to_csv('out.csv', encoding='utf-8', index=False) # write to local
mox.file.copy('out.csv', os.path.join(output_path, 'out.csv')) # copy to obs
logging.info('success write data to obs. output_file=%s' % os.path.join(output_path, 'out.csv'))
if __name__ == '__main__':
logging.info('start to running......')
# parse running argument
args, un_known = argument_init()
# Read from obs
dataframe = read_from_obs(args.input_path)
if dataframe is None:
dataframe = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
# start call your own process function
# dataframe = data_process(dataframe)
# end call your own process function
# Write to obs
write_to_obs(dataframe, args.output_path)
logging.info('finish.....')
根據實際情況修改main.py代碼,在代碼中是可以傳遞參數的哈;然後點擊“運行”
來到如下頁面:
補充一下:
1)執行引擎有如下幾種
2)如果main.py中不需要外部參數,或者有默認的參數不需要改變,可以不用傳遞參數。
完成上面的設置後,點擊“提交運行”,看到狀態是在運行中,等待一會就看到運行成功啦。
好啦,現在完成網絡AI模型開發的數據入湖、數據處理。
友情鏈接: 【華爲雲-上雲之路】網絡AI模型開發(1)創建IAM用戶、訂閱AI服務
福利:華爲雲--公開課程《網絡AI模型開發》
地址:7天玩轉網絡AI模型開發
華爲雲官網出品,有視頻,有課件,都是免費的。