如何在 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 文件中的下一行的主要内容,如果未能解决你的问题,请参考以下文章
如何读取 CSV 并生成 json/avro 文件,其中 pig 按第一列的值分组?
在用户输入值而不覆盖以前的值后,如何写入 .csv 文件的下一行?