zoukankan      html  css  js  c++  java
  • 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();


  • 相关阅读:
    tomcat配置用户角色权限
    jenkins集成maven
    centos7安装maven
    jenkins凭证插件的安装和基本使用
    Jenkins用户权限管理
    虚拟机NAT模式配置静态IP
    制作sentinel docker镜像
    docker安装nacos
    Tkinter
    neo4j导入csv文件
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205437.html
Copyright © 2011-2022 走看看