pig读取部分列 (全部列中的少部分列)
pig流式数据,load数据时,不能读入任意列。
但是,可以从头读,只能连续几列。就是前几列。比如10列数据,可以只读前3列。但不能读第3列:
如:数据testdata
[wizad@sr104 lmj]$ cat testdata.txt
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
pigscript读入:
my = load '/home/wizad/lmj/testdata.txt' using PigStorage(',')
as(one:chararray,
two:int);
describe my;
dump my;
结果为
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
(1,2)
结构为
grunt> describe my;
my: {one: chararray,two: int}
只读入其中两列。
如果想读入任意列,可以使用piggybank提供的hivecolumnarloader自行开发。
pig是java编写的,所以也可以自己写java的UDF,实现load时的格式 加载函数loadfunc,逐行读入时,只留下其中任意列。就可以了。
如下两个
pig自身的:
DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader();
自己编写的:
DEFINE SequenceFileLoader com.vpon.wizad.etl.pig.SequenceFileCSVLoader();
相关文章
- C#读取Excel,DataTable取值为空的解决办法
- file 从InputStream读取byte[]示例
- HBase原理-迟到的‘数据读取流程’部分细节
- Java 读取ANSI文件中文乱码问题解决方式[转]
- 【转载】 java利用snmp4j包来读取snmp协议数据(Manager端)
- C语言中文件的读取和写入
- springboot 使用consul 读取配置文件(遇到的坑太多,没记录)
- C#图像处理-OpenCVSharp教程(六) OpenCVSharp实例应用:视频分解图片、图片合成视频、批量读取图片(有序/无序)
- Flink教程(8) Checkpoint 状态管理 读取Kafka并写入Redis(实现exactly once)
- Java EasyExcel读取Excel同步返回数据的方法及示例代码
- IOCP+UDP收包的时候:报0xC000000005,读取0x00000010错误的问题
- unity中的数据储存读取(基于PlayerPrefs)
- C++openCV图像的读取、显示、保存、信息
- [IOS]UIWebView实现保存页面和读取服务器端json数据