flatten:
- 用来降低,bag、tuple的嵌套级别!
- hadoop中存储是相对比较廉价的,所以可以将一些在sql中要单独提出存储其它标的数据,直接存储在记录中,用冗余减少join操作,应为在hadoop中join是很耗时的,在数据中嵌套bag,可以看做,记录中嵌套另一条记录!
- 有时需要将这个条码分离出来,则可以用flatten
- 如果bag中有多条数据,则会用这条数据,与原记录做叉积!
- 如果bag中无数据,则会当前记录会被丢弃,所以要不想被丢弃,需要先做处理
嵌套foreach:
就是对每一条数据,使用一些列操作,使得在foreach 对每一条数据嵌套更多的组合操作!
一般嵌套的操作都是串行!
理论上可以支持,任意语句嵌套,但是目前只支持filter,limit,orderby,distinct!
mergejoin
skewjoin:
cogroup:
将有相同键值的多个文件,按相同键值收集到一起
收集键值过程会触发一个reduce过程!
union:
union是将两个文件合成一个文件,不需要额外的reduce操作!
union的两个文件如果有相同的模式,或能通过隐式转换,则合并的文件具有相同的模式,否则没有模式(不同记录,模式可能会不同)
union是更具字段名字合并的
若要求结果有模式,则可以使用schema,会将不同的添加进来,相同的合并,之前记录没有相关字段的用null填充!
cross:
就是数学中的叉积,会产生 n*m条数据记录
会生成一个综合键,进行join