1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... ·...

24
大赛的赛题数据存放在 PaaS 平台的 HDFS 的共用目录,在通过 Sophon 建模时,您需 要加载赛题数据,有两种方式装载数据,可以通过在 HDFS为数据源,也可以通过 SQL 作为 数据源。在建模后,需要把结果数据写入到 HDFS 中。 1、HDFS 数据源 在通过 HDFS 为数据源,直接通过 Sophon 进行建模。首先配置数据链接;然后建立数 据集;最后通过 Sophon 通过拖拉拽,把配置好的数据集作为数据集算子,拉入到建模步骤 中。 下面以一个学生的数据文件为例,相信介绍相应的步骤。 1. 新建 HDFS 数据连接 点击“数据源设置”图标,再点击“数据链接”,展现如下页面,显示当前已经配置好的所有 数据源。 选择“新建链接”,展现数据链接的配置页面,按照如下提示配置, 【连接类型】选择“远程分布式集群连接” 【名称】自定义数据连接名称,“test1” 【namenodes】输入邮件提供的 IP 地址 【port】50070 最后,点击【测试】,在测试通过后,点击保存即产生一个新的“数据链接”。

Transcript of 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... ·...

Page 1: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

大赛的赛题数据存放在 PaaS 平台的 HDFS 的共用目录,在通过 Sophon 建模时,您需

要加载赛题数据,有两种方式装载数据,可以通过在 HDFS 为数据源,也可以通过 SQL 作为

数据源。在建模后,需要把结果数据写入到 HDFS 中。

1、HDFS 数据源

在通过 HDFS 为数据源,直接通过 Sophon 进行建模。首先配置数据链接;然后建立数

据集;最后通过 Sophon 通过拖拉拽,把配置好的数据集作为数据集算子,拉入到建模步骤

中。 下面以一个学生的数据文件为例,相信介绍相应的步骤。

1. 新建 HDFS 数据连接

点击“数据源设置”图标,再点击“数据链接”,展现如下页面,显示当前已经配置好的所有

数据源。

选择“新建链接”,展现数据链接的配置页面,按照如下提示配置,

【连接类型】选择“远程分布式集群连接”

【名称】自定义数据连接名称,“test1”

【namenodes】输入邮件提供的 IP 地址

【port】50070

最后,点击【测试】,在测试通过后,点击保存即产生一个新的“数据链接”。

Page 2: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

2. 新建数据集

点击“数据源设置”图标,再点击“数据集”,展现如下页面,显示当前已经配置好的所有数

据集。

选择“新建数据集”,再选择【远程分布式集群连接】

在【名称】输入数据集名称,点击“下一步”

在数据集详细配置页面,按照如下设置进行配置,

• 【连接】选择步骤 1 中的自定义数据链接的名称,“test1”

Page 3: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

• 【 文 件 路 径 】 选 择 对 应 赛 题 数 据 路 径 ( 此 处 以

/sophon/public/samples/student.csv 文件为例);也可以通过“点击选择文件路

径”的提示,按照树状结构选择数据文件。

• 点击【预览数据】查看是否可以正常展示

• 如果预览出数据点击【完成】即可生成数据源

3. 实验中拖拽数据文件即可正常使用

【数据集】-【我的数据集】当中即可看到创建的 hdfs 数据集,正常拖拽使用即可

Page 4: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

2、SQL 数据数据源

PaaS 平台也提供 Inceptor 作为 SQL 数据源,您可以通过 SQL 语句的方式,对数据进行

加工处理,然后再通过 Sophon 进行建模。 首先建立数据链接链接到 Inceptor;然后通过

SQL Editor 把 HDFS 的数据加载到 Inceptor 中的表中,并进行特征处理;再建立处理好的特

征数据的数据集;最后通过 Sophon 建模 。

1. 新建 inceptor 数据连接

点击“数据源设置”图标,再点击“数据链接”,展现如下页面,显示当前已经配置好的所有

数据源。

在数据连接详情配置页面,按照下列提示进行配置,

【连接类型】选择 jdbc/inceptor

【名称】自定义连接名称

【驱动】选择 inceptor-5.1.0

【地址】填写邮件中提供的 IP 地址

【端口】填写 10000

【数据库名称】填写 sophon 登陆用户名

【用户名】填写 sophon 登陆用户名

【密码】填写 sophon 登陆用户密码

点击【测试】通过后,【保存】即可

Page 5: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

2. 通过【SQL 编辑器】,选择上一步创建的数据连接。

a) 建立关联到 HDFS 数据文件的外表。 对存放在/sophon/public/目录下的数据文件

通过创建外表的形式导入数据,此处以/sophon/public/samples/student.csv 文件为

例子

创建外表语句(需了解数据结构,location 指向文件存在目录,不能包括文件名)

CREATE EXTERNAL table student (id INT, name STRING,age string)

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

LOCATION '/sophon/public/samples';

点击【执行语句】,当看到 success 提示后,证明已将文件导入表,您也可以通过

执行语句 select * from {tablename} 来查看数据是否已经进入数据库,确认无误后

即可通过 sql 形式进行特征处理

b) 数据插入到新表,以方便后续使用。在 SQL Editor 中,使用下列语句

Page 6: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

CREATE table student_new (id INT, name STRING,age string);

insert into student_new select * from student;

c) 通过 SQL Editor 进行特征处理,并把生成特征数据写入到相应的表中。

3. 创建 inceptor 数据集

通过 SQL 特征处理后的数据可以创建 inceptor 数据集以便在实验当中使用。

新建【数据库数据集】数据集。

【名称】自定义数据集名称

【连接】选择步骤 1 中的数据连接

【querty 方式】选择 Table

【数据库表】选择已经处理过的表

确认无误后点击【完成】即可保存数据集

Page 7: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

4. 实验中拖拽数据集算子

【数据集】-【我的数据集】当中即可看到创建的 inceptor 数据集,正常拖拽使用即可

3、实验数据结果保存

1. 创建 HDFS 保存数据目录

点击“文件管理”图标,选择“集群分布式文件”,创建“data”目录,作为保存的目录。

Page 8: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

2. 在实验中选择【导入导出】-【写入数据源】的算子(暂不支持【写入 inceptor】,【写

入数据库】)

写入数据源参数设置中:

【数据源】选择集群式分布文件

【文件路径】参考步骤 1 的路径设置,“集群分布式文件/data”

【文件名称】自定义文件名称

【文件类型】选择 csv

4、地铁赛题数据使用方式

1、查看赛题数据目录

Page 9: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

2、使用 HDFS 的方式加载

Page 10: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码
Page 11: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

3、使用 Inceptor 数据库加载

Page 12: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

使用 SQL 编辑器,在 inceptor 中创建外表,读取 hdfs 中地铁数据目录,以表的形式显示

Page 13: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

建表语句如下:

CREATE EXTERNAL TABLE QF_DAT_TRADE_external (

FILE_ID DECIMAL(13,0) NOT NULL,

RECORD_ROW DECIMAL(5,0) NOT NULL,

CARD_ID VARCHAR(20) NOT NULL,

CARD_TYPE VARCHAR(2),

TRADE_TYPE VARCHAR(2) NOT NULL,

TRADE_ADDRESS VARCHAR(10) DEFAULT '0000000000',

TRADE_DATE STRING NOT NULL,

TERMINAL_ID VARCHAR(16) NOT NULL,

OPERATOR VARCHAR(6),

TRADE_MONEY DECIMAL(10,0) DEFAULT 0,

TRADE_VALUE DECIMAL(10,0) DEFAULT 0,

CURRENT_VALUE DECIMAL(10,0) DEFAULT 0,

FOREGIFT DECIMAL(10,0) DEFAULT 0,

CHARGE DECIMAL(10,0) DEFAULT 0,

CARD_SN DECIMAL(10,0) DEFAULT 0,

TERMINAL_SN DECIMAL(10,0) DEFAULT 0,

TERMINAL_SUM DECIMAL(10,0) DEFAULT 0,

TAC VARCHAR(8),

START_DATE STRING DEFAULT "",

START_ADDRESS STRING,

START_TERMINAL VARCHAR(16),

TRADE_TYPE_EX VARCHAR(4),

DESTINATION VARCHAR(10),

SAM_ID VARCHAR(20),

APP_TYPE VARCHAR(1),

SAM_SN DECIMAL(10,0),

CARD_IDM VARCHAR(16),

READER_SN VARCHAR(10),

READER_SUM VARCHAR(10),

CARD_TYPE_EX VARCHAR(2),

CARD_OWNER VARCHAR(2),

Page 14: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

READER_FILE_NAME VARCHAR(14),

MODE_ID VARCHAR(8),

CLEARING_DATE STRING NOT NULL ,

RECEIVE_DATE STRING NOT NULL ,

DAY DECIMAL(3,0),

RUN_TYPE VARCHAR(2),

PAY_CARD_ID VARCHAR(26),

PURSE_FLAG VARCHAR(1),

CITY_CODE VARCHAR(4),

INDUSTRY_CODE VARCHAR(4)

)ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

LOCATION '/sophon/public/交通';

我们发现地铁的数据文件中含有表头

通过 SQL 过滤语句对数据进行过滤:

CREATE table QF_DAT_TRADE as select * from QF_DAT_TRADE_external where file_id is not NULL;

总共的记录条数为 171253020 条:

Page 15: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

创建地铁 inceptor 数据集:

Page 16: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

4、地铁数据使用

5、地铁预测数据回写

Page 17: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

5、应急管理数据使用方式

1、查看 hdfs 文件系统中的文件位置:

2、建立 hdfs 数据连接

Page 18: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

3、新建数据集读取应急数据文件

Page 19: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

4、在建模环境中使用应急数据集

Page 20: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

6、保险数据使用方式

1、数据文件在 hdfs 上的位置

2、保险的赛题需要借助于 Sophon Notebook 基于编码的方式来完成,因此需要在 notebook

中加载 hdfs 的 PDF 文件

打开 notebook

Page 21: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

打开 python3 编程界面

代码文件如下:

!pip3 install pdfminer3k

!pip3 install pandas

!pip3 install hdfs

import io

import glob

import pandas as pd

import numpy as np

import os

import re

import json

from pdfminer.pdfparser import PDFParser,PDFDocument

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter

Page 22: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

from pdfminer.converter import PDFPageAggregator

from pdfminer.layout import LTTextBoxHorizontal,LAParams

from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

#python 读取 hdfs 上的 pdf 数据文件

# 库依赖:hdfs

from hdfs import Client

# 初始化 client

#url:ip:端口,root:制定的 hdfs 根目录,timeout:设置的超时时间

client = Client("http://172.22.4.51:50070",root="/",timeout=100,session=False)

# 查看支持的方法

#dir(client)

#查看 hdfs 文件目录

#client.list("/sophon/public/保险/年金保险养老年金保险",status=False)

pdf_path="/sophon/public/保险/年金保险养老年金保险/阳光人寿保险股份有限公司_年金保

险-养老年金保险_新型产品_阳光人寿基业长青团体养老年金保险(分红型).pdf"

with client.read(pdf_path) as reader:

praser = PDFParser(reader)

doc = PDFDocument()

praser.set_document(doc)

doc.set_parser(praser)

# 获取 path 路径下的 permission 权限,如果权限不够,则后续很多操作会报错

def get_limit(client):

stat=client.status(path)

per = stat.get("permission")

return per

def extract_text_pdf(pdf_path):

# 打开 hdfs 的 pdf 文件

with client.read(pdf_path) as reader:

#用文件对象来创建一个 pdf 文档分析器

praser = PDFParser(reader)

# 创建一个 PDF 文档

doc = PDFDocument()

# 连接分析器 与文档对象

praser.set_document(doc)

doc.set_parser(praser)

# 提供初始化密码

# 如果没有密码 就创建一个空的字符串

doc.initialize()

if not doc.is_extractable:

Page 23: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码

raise PDFTextExtractionNotAllowed

else:

# 创建 PDf 资源管理器 来管理共享资源

rsrcmgr = PDFResourceManager()

# 创建一个 PDF 设备对象

laparams = LAParams()

device = PDFPageAggregator(rsrcmgr, laparams=laparams)

# 创建一个 PDF 解释器对象

interpreter = PDFPageInterpreter(rsrcmgr, device)

# 循环遍历列表,每次处理一个 page 的内容

for page in doc.get_pages(): # pdf.get_pages() 获取 page 列表

interpreter.process_page(page)

# 接受该页面的 LTPage 对象

layout = device.get_result()

# 这里 layout 是一个 LTPage 对象 里面存放着 这个 page 解析出的各种

对象 一般包括 LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就

获得对象的 text 属性,

for x in layout:

if (isinstance(x, LTTextBoxHorizontal)):

results = x.get_text()

print(results)

#设置 pdf 文件路径和 txt 文件路径

pdf_path="/sophon/public/保险/年金保险养老年金保险/阳光人寿保险股份有限公司_年金保

险-养老年金保险_新型产品_阳光人寿基业长青团体养老年金保险(分红型).pdf"

# 主函数

def main():

permission = get_limit(client)

print("current path permission: ", permission)

extract_text_pdf(pdf_path)

# 调用主函数

main()

Page 24: 1 HDFS 数据源 - Transwarpsupport.transwarp.cn/uploads/default/original/2X/1/... · praser.set_document(doc) doc.set_parser(praser) # 提供初始化密码 # 如果没有密码