1. 用load导入数据
两种方法可以实现。
第一,导入numpy,将文本数据导入txt文档,然后通过函数load就可以读取txt文件,就可以导入文本数据了。
第二,导入pandas包,将文本文件等距插入excel表,然后通过read_txt来读取excel文件,这样也可以导入文本数据。
2. load导入数据到hive
inceptor改字节串长度就是要在导入函数之前对文件作出修改。
最近遇到一个导数需求,需要把inceptor中的数据按照每个字段定长(指定字节数)导出成文本文件。思路如下:1)到处inceptor表到hdfs,这个过程,主要处理字段长度,补位,去小数点,规范行分隔符和切分文件2)取hdfs文件到本地,这个过程,主要处理文件名称的规范化,增加首行字段名,及获取记录数样例脚本
#!/bin/sh
#说明#1)脚本需要在能执行beeline和hadoop命令的机器上执行#2)部分用户执行beeline和hadoop命令时可能会找不到命令,请配置好环境变量,或者使用命令的绝对路径
导出数据到hdfs##执行脚本前提前建好导出数据的中间表#–如果需要指定换行(\n) 、回车(\r)为分隔符,则建表语句如下。这里注意,windows的行分隔符是 \r\n , linux 下默认是\n#create table test(aa string);#ROW FORMAT DELIMITED#LINES TERMINATED BY ‘\r\n’;
#连接inceptor
v_conn_ipt=“beeline -u jdbc:hive2://tdh4:10000/tpcds_orc_2”#指定导出的文件个数v_file_num=“set mapred.reduce.tasks=5;”
##每次执行前需要清空临时表v_clean_table=“truncate table test;”
#导出数据sql##注意,使用shell脚本封装时,这里是 四个反斜杠 ‘\\’ ,直接在inceptor 里直接执行这里只需要两个反斜杠 ‘\’v_load_string=“insert into testselect lpad(s_store_sk,5,‘0’)||-- 数字左补0,右对齐rpad(s_store_name,8,’ ‘)|| – 字符右补空格,左对齐regexp_replace(to_char(trunc(s_tax_precentage,2),‘0.00’),’\\.’,’’) as aa --数值型,去掉小数点,trunc直接截取合适的小数,to_char 格式化,replace去掉小数点from store distribute by rand();”
##执行导出语句把需要导出的文件写到hdfs
${v_conn_ipt} -e “${v_file_num} ${v_clean_table} ${v_load_string}”
数据导出到本地并添加表头行数等信息#文件导出路径v_file_path="/inceptorsql1/user/hive/warehouse/tpcds_orc_2.db/hive/test"v_files=hadoop fs -ls ${v_file_path}|awk '{ print $8 }'#文件导出的本地路径v_target_path=/root/xwz/
j=0for i in $v_filesdoecho ${i}#根据接口规范定义文件名,逻辑自行补充v_new_file_name=“xxx_xxx_${j}.TXT”echo “${v_new_file_name}”#把字段名写入文件第一行echo “s_store_sk|s_store_name|s_tax_precentage”>${v_target_path}${v_new_file_name}#导出hdfs文件到本地hadoop fs -cat ${i}>>${v_new_file_name}#如果需要获取每个文件的记录数使用如下命令v_count=hadoop fs -cat ${i}|wc -lecho “文件${v_new_file_name}的记录数为:${v_count}”j=expr ${j} + 1
done
遇到的问题中文及rapd 补位问题
在inceptor中,rpad 计算的是字符数,不是字节数,而Oracle的rpad是计算的字节数。此时当出现中文时,Oracle会把一个中文当两个字节算 rpad(f1,12,’ ‘) 当f1为 “中国”Oracle会在后面补充8个空格,字节数为12。inceptor会把一个中文当两个字节算 rpad(f1,12,’ ‘) 当f1为 “中国” f1,算两个字符,Oracle会在后面补充10个空格,此时实际字节数就超过了12了。处理方式因为inceptor一个中文字符是3或4个字节,使用rpad按字符个数补的话,只会多补,不会少,使用substrb 函数对 inceptor 中rpad多补的字节数直接截断,substrb函数是切割指定的字节长度比如对中文字段f1要指定定长12字节,可以使用 substrb(rpad(f1,12,’ '),1,12)
3. load导入数据为什么只导入1条
Python导入数据有三种方法。方法一:通过标准的Python库导入CSV文件。
Python提供了一个标准的类库CSV文件。这个类库中的reader()函数用来导入CSV文件。当CSV文件被读入后,可以利用这些数据生成一个NumPy数组,用来训练算法模型。
方法二:通过NumPy导入CSV文件。
也可以使用NumPy的loadtxt()函数导入数据。使用这个函数处理的数据没有文件头,并且所有的数据结构都是一样的,也就是说,数据类型是一样的。
方法三:通过Pandas导入CSV文件。
通过Pandas来导入CSV文件要使用pandas.read_csv()函数。这个函数的返回值是DataFrame,可以很方便的进行下一步的处理,实际操作过程中推荐使用这种方法。
4. load导入数据到mysql语句
数据太大,用数据库客户端软件直接导入非常卡,还是直接执行SQL吧。
1、指定文件路径。
2、字段之间以逗号分隔,数据行之间以\r\n分隔(我这里文件是以\n分隔的)。
3、字符串以半角双引号包围,字符串本身的双引号用两个双引号表示。 Sql代码 复制代码 代码如下:load data infile 'D:\\top-1m.csv' into table `site` fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\n'; 顺带也备份个导出吧。 Sql代码 复制代码 代码如下:select * from `site` into outfile 'D:\\top-1m.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\n';
5. load命令导入数据
一般把从Excel导入数据到stata是先把Excel数据存成csv格式,然后运行命令insheet using d:\1.csv直接的把Excel格式数据导入到Stata的方法是:odbc load,dsn("文件类型;DBQ=文件的路径和名称") table("excel里面工作表的名称$")odbc load,dsn("Excel Files;DBQ=d:\data\data.xls") table("sheet1$")
6. 用load导入数据出现???
一般把从Excel导入数据到stata是先把Excel数据存成CSv格式,然后运行命令
insheet using d:\1.CSv
直接的把Excel格式数据导入到Stata的方法是:
odbc load,dsn("文件类型;DBQ=文件的路径和名称") table("Excel里面工作表的名称$")
odbc load,dsn("Excel Files;DBQ=d:\data\data.xls") table("sheet1$")
7. load导入数据如何将字符串转化为date
一、save与load函数保存和加载程序数据
基本格式为:
save('FILENAME', 'VARIABLES')
load('FILENAME', 'VARIABLES')
例如,save ('datas.mat','data','x','y','z'); 表示将内存变量data, x, y, z 保存到当前路径下的datas.mat文件,其它程序若要载入这几个变量的数据,只需前面路径下执行load datas;即可。
二、txt文件的导入导出
1. 导入格式一致的数据
例1 现有txt文件如下:
代码:
x1=load('data1.txt'); %注意设置当前路径为文件所在路径
x2=load('data2.txt');
2. 导入有固定分隔符的数据
dlmread('FILENAME', '分隔符', '读取范围')
例2读取txt文件如下(需要跳过前2行的非数据行,或列数不同):
代码:
x3=dlmread('data3.txt', ',', 2,0) ; %设定读取的初始位置:2行0列之后的数据
x4=dlmread('data4.txt'); %列数不足用0不齐,load函数读取将报错
3. 将矩阵数据写入指定分隔符的ASCII格式文件
dlmwrite(‘文件名’, ‘数据’, ‘分隔符’, ‘起始行’, ‘起始列’)
dlmwrite(‘文件名’, ‘数据’, '-append')
'-append'表示将矩阵数据写到文本末尾,若不指定将覆盖原文本数据。
4. 导入带表头的txt或excel数据
importdata(‘文件名’, ‘分隔符’, ‘n’);
将数据存入“结构体”,其中,n表示n行表头;也可以用来读入图片:
x=importdata('tupian.jpg'); image(x);
例3 读入如下的txt文件:
代码:
x5=importdata('data5.txt',' ',1); %空格分隔, 第1行是表头
x5.data %数据
x5.textdata %表头变量
5. 导入混合格式文本
textscan(fid, 'format', N, 'param', value);
其中,fid为文件句柄;format为读取格式;N表示用该格式读取N次数据;'param', value(可选项)指定分隔符和值对。
注意:使用textscan之前,必须先用fopen打开要读入的文件;函数textread用法类似。
例4 混合格式数据的txt文件如下:
代码:
fid=fopen('data6.txt','r'); %打开文件句柄
C=textscan(fid, '%s%s%f32%d8%u%f%f%s%f'); %按格式读入元胞数组C
fclose(fid); %关闭文件句柄
C{1}
C{9}
[names,types,y,answer]=textread('data7.txt','%9c %6s %*f %2d %3s', 1) %读入固定格式的文件的第一行,忽略其中的浮点值
运行结果:C{1} = 'Sally' 'Joe' 'Bill'
C{9} = 5.1000 + 3.0000i 2.2000 - 0.5000i 3.1000 + 0.1000i
names = Sally Lev
types = 'el1'
y = 45
answer = 'Yes'
三、csv文件导入与导出
csv文件是逗号分隔的txt文件,使用csvread()函数,有3种格式:
csvread('filename', row, col, range)
其中,第一个参数指定文件名;
row和col指定开始读取位置的行号和列号。注意是从0开始计数,即row=0, col=0表示从文件中第一个数(1, 1)开始读;
range指定读取的范围,range=[R1 C1 R2 C2],表示读取区域的左上角位置为(R1+1, C1+1),读取区域的右下角位置为(R2-1, C2-1),且要求row, col等于R1, C1.
注意:csv文件中的空项,读到矩阵中时,会初始化为0.
四、 Excel文件的导入与导出
1. 导入Excel数据文件
[num, txt, raw] = xlsread('文件名.xls','工作表', '数据范围')
例5 现有data1.xlsx文件(导入Sheet1的A1至H4数据):
代码:
[num,txt,raw]=xlsread('data1.xlsx','Sheet1','A1:H4')
%数据返回num;文本返回txt;不处理直接作为元胞返回raw
运行结果:
num =
1 60101 6010101 NaN 0 63 63
2 60101 6010102 NaN 0 73 73
3 60101 6010103 NaN 0 0 0
txt =
'序号' '班名' '学号' '姓名' '平时成绩' '期末成绩' '总成绩' '备注'
'' '' '' '陈亮' '' '' '' ''
'' '' '' '李旭' '' '' '' ''
'' '' '' '刘鹏飞' '' '' '' '缺考'
raw =
'序号' '班名' '学号' '姓名' '平时成绩' '期末成绩' '总成绩' '备注'
[ 1] [60101] [6010101] '陈亮' [ 0] [ 63] [ 63] [ NaN]
[ 2] [60101] [6010102] '李旭' [ 0] [ 73] [ 73] [ NaN]
[ 3] [60101] [6010103] '刘鹏飞' [ 0] [ 0] [ 0] '缺考'
2. 将数据导出到Excel文件
status = xlswrite(‘filename.xls’, ‘数据’, ‘工作表’, ‘指定区域’)
成功返回1,失败返回0.
例6 将矩阵或元胞数组的数据写成xls文件
代码:
A=[12.7 5.02 -98 12; 63.9 0 -0.2 56];
xlswrite('testdata.xls', A)
d={'Time', 'Temp'; 12 98; 13 99; 14 97};
s=xlswrite('tempdata.xls', d, 'Temperatures', 'E1')
%将数据d写入文件tempdata.xls, Temperatures表,E1起始
例7 读取数据、处理日期数据,根据日期绘制开盘价变化趋势图形。ExpData.xlsx文件如下(部分):
代码:
[num,txt]=xlsread('ExpData.xlsx');
%读取excel表格中的数据,数值存入num,文本存入txt
date=txt(2:end,1); %取出日期数据单独处理
t=datenum(date); %将日期转化为数值(方便绘图使用)
date1=datestr(t); %将数值转化为日期
h=figure %生成空的图形窗口句柄
set(h,'color','w'); %将图的背景颜色设为白色
plot(t,num(:,1)); %以日期为横坐标,开盘价为纵坐标,绘制图形
%plot(t,num(:,1),'*'); %绘制散点图
datetick('x',23); %将x轴标注变成日期格式:mm/dd/yyyy
xlabel('日期');
ylabel('开盘价');
运行结果:
8. load导入数据显示文件已损坏
数字电视机顶盒只出现LOAD是表示机顶盒正在加载中,一般是开机时出现的画面,用户只需要耐心等待机顶盒加载完成就可以观看电视节目了。 如果一直停留在加载的画面,则可能存在以下原因:
1、机顶盒的系统/固件问题导致开机死机了,一般可以将机顶盒断电、关机,然后再接通电源开机即可恢复正常。
2、如果重新开机多次仍卡在加载画面不动,则可能是机顶盒的固件损坏了,需要联系售后服务刷入新固件才能解决。
3、也可能是机顶盒的硬件故障导致的,比如内部电路故障、主板芯片及其他零部件故障等,同样需要联系机顶盒的售后服务进行检测和维修才能解决。
- 相关评论
- 我要评论
-