【華爲雲-上雲之路】網絡AI模型開發(2)數據入湖、數據處理

本篇文章主要分享在華爲雲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模型開發

華爲雲官網出品,有視頻,有課件,都是免費的。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章