pigx框架 源码_【Pig源码分析】谈谈Pig的数据模型

本文详细介绍了Pig的数据模型,包括Schema、数据类型、复杂数据类型如tuple、bag和map,以及null数据类型。此外,还深入源码探讨了Tuple和Bag的实现,并给出了实战例子,展示了如何利用Pig处理avro日志数据,统计用户app列表和使用次数。
摘要由CSDN通过智能技术生成

1. 数据模型

Schema

Pig Latin表达式操作的是relation,FILTER、FOREACH、GROUP、SPLIT等关系操作符所操作的relation就是bag,bag为tuple的集合,tuple为有序的field列表集合,而field表示数据块(A field is a piece of data),可理解为数据字段。

Schema为数据所遵从的类型格式,包括:field的名称及类型(names and types)。用户常用as语句来自定义schema,或是load函数导入schema,比如:

A = foreach X generate .. as field1:chararray, .. as field2:bag{};

A = load '..' using PigStorage('\t', '-schema');

A = load '..' using org.apache.pig.piggybank.storage.avro.AvroStorage();

若不指定field的类型,则其默认为bytearray。对未知schema进行操作时,有:

若join/cogroup/cross多关系操作遇到未知schema,则会将其视为null schema,导致返回结果的schema也为null;

若flatten一个empty inner schema的bag(即:bag{})时,则返回结果的schema为null;

若union时二者relation的schema不一致,则返回结果的schema为null;

若field的schema为null,会将该字段视为bytearray。

为了保证pig脚本运行的有效性,在写UDF时要在outputSchema方法中指定返回结果的schema。

数据类型

Pig的基本数据类型与对应的Java类:

Simple Pig TypeExampleJava Class

bytearray

DataByteArray

chararray

'hello world'

String

int

10

Integer

long

10L

Long

float

10.5F or 1050.0F

Float

double

Double

boolean

true/false

Boolean

datetime

DateTime

bigdecimal

BigDecimal

biginteger

BigInteger

复杂数据类型及其对应的Java类:

Complex Pig TypeExampleJava Class

tuple

(19, 'hello')

Tuple

bag

{('hello'), (18, 1)}

DataBag

map

[open#apache]

Map

Pig的复杂数据类型可以嵌套表达,比如:tuple中有tuple (a, (b, c, d)),tuple中有bag (a, {(b,c), (d,e)})等等。但是一定要遵从数据类型本身的定义,比如:bag中只能是tuple的集合,比如{a, {(b),(c)}}就是不合法的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值