使用ApachePig,如何根据标题行从csv中选择和存储列

yx2lnoni  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(314)

我有许多csv文件,都有一个标题行。这些文件看起来都很相似:

name, gender, preference, ....
peter, m, soap, ...
paul, m, gel, ...
mary, f, soap, ...
.
.
.

但是列的位置和确切的标题名可能会有点不同,例如,另一个文件可能看起来像:

"the preferences", "the name", "the gender",....
soap, peter, m, ...
gel, paul, m, ...
soap, mary, f, ...
.
.
.

我只想输出/存储标题中包含单词“的列” name ". 这个栏目的psotion我事先不知道,因为每个文件可以不同。
因此,我需要将每个文件中的列与其头文件名相关联。我能用Pig做这个吗?
我想用两个 FILTER 运算符(一个用于标头,一个用于数据),但此运算符的数据不必读取两次吗?

dz6r00yl

dz6r00yl1#

在流媒体或存储功能中这样做可能更容易。
参见csvexcelstorage和skip\u input\u header的实现-http://svn.apache.org/repos/asf/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/storage/csvexcelstorage.java
您可以读取文件的头,找到“name”字段的位置,然后只返回该位置中的字段,以保存文件中的所有其他记录。
您应该确保每个分割都是一个单独的文件,因为如果在任务之间分割一个文件,则处理文件中不包含头的部分的任务将无法检测“name”字段。

相关问题