如何在 Pig 中读取 csv 文件中的下一行

Posted

技术标签:

【中文标题】如何在 Pig 中读取 csv 文件中的下一行【英文标题】:how to read next line in csv file in Pig 【发布时间】:2015-01-21 11:08:39 【问题描述】:

我想写一个猪脚本来计算两点之间的距离。 数据输入是

x,y
0.0,0.0
18.6,-11.1
36.1,-21.9
53.7,-32.6
70.1,-42.8
86.5,-52.6
101.7,-62.3

距离公式:sqrt((x2-x1)^2 + (y2-y1)^2)

但我无法读取 Pig 中的下一行来计算距离!

谁能帮帮我?

【问题讨论】:

【参考方案1】:

如果您能以某种方式为点对生成一个通用标识符,则可以按此进行分组,然后计算距离。

ID, x, y
A, 0.0, 0.0
A, 18.6, -11.1
B, 36.1, -21.9
B, 53.7, -32.6
...

Group by 将返回类似A, (0.0, 0.0), (18.6, -11.1) 的内容。现在您可以编写一个 UDF 来调用由计算距离的两个点组成的元组。

【讨论】:

每组之间的距离如何?在您的示例中,我如何计算 A 和 B 之间的距离? 对于这种情况,您需要复制点。问题是 map reduce 正在处理键值对,在 pig 的情况下,单行(相关条目)是这样一对,因此独立于所有其他行进行处理。所以如果不把它组合成一行(键值对)就不能一起处理。 非常感谢您的回复。

以上是关于如何在 Pig 中读取 csv 文件中的下一行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pig 中使用标题(第一行)作为字段名称

我如何使用scanf读取文本文件中的下一行

如何读取 CSV 并生成 json/avro 文件,其中 pig 按第一列的值分组?

在用户输入值而不覆盖以前的值后,如何写入 .csv 文件的下一行?

在 Scala 中,如何读取第一行有标题的简单 CSV 文件?

可以使用 PIG 读取的文件格式