【问题标题】:CSV processing in HadoopHadoop 中的 CSV 处理
【发布时间】:2011-12-25 18:14:50
【问题描述】:

csv 文件中有 6 个字段:

  • 首先是学生姓名(String
  • 其他是学生的分数,例如科目 1、科目 2 等

我正在用java写mapreduce,用逗号分割所有字段,并在键中发送学生姓名,在地图值中标记。

reduce 中,我正在处理他们输出学生姓名的键和他们的分数加上reduce 的值的总、平均值等。

我认为可能有另一种更有效的方法来做到这一点。

有没有人知道更好的方法来执行这些操作?

hadoop有没有内置函数可以按学生姓名分组,可以计算该学生的总分和平均分?

【问题讨论】:

  • 您能否发布数据样本和期望输出(带有标题名称)。另外,学生名似乎是关键,它在文件中是唯一的吗?它只显示一次吗?
  • 不,有点名。因为有些学生的名字和姓氏相同。我不处理点名。

标签: java csv hadoop mapreduce


【解决方案1】:

您可能想看看 Pig http://pig.apache.org/,它在 Hadoop 之上提供了一种简单的语言,让您可以用大大更短的代码执行许多标准任务。

【讨论】:

  • 好的,会检查一下。但是它会在hadoop上产生开销吗??
  • 它创建 Hadoop 查询。因此,“翻译”的开销很小,您可能会想出一种更有效的方式来编写 Hadoop 代码,因此这可能算作开销。但是您的要求似乎很合理,所以我相信 Pig 能够为此找到有效的解决方案。
  • 关于效率的一件事。 Pig 的团队声称 pig scrips 比用 java 编写 mapreduce 更有效,因为它们使用的技术比普通开发人员所不知道。
  • 当然每个人都比一般的开发者好;)
  • 我需要点赞按钮来点赞这里的 cmets。
    而且 Apache 产品的编码必须比普通开发人员好。 ;-)
【解决方案2】:

使用 HIVE。它比用 java 编写 mapreduce 更简单,而且我可能比 PIG 更熟悉,因为它是类似 SQL 的语法。

https://cwiki.apache.org/confluence/display/Hive/Home

你要做的是 1)在您的机器或 1 个节点中安装 hive 客户端并将其指向您的集群。 2)为该文件创建表描述 3) 加载数据 4)编写SQL。由于它认为您的数据看起来像 student_name、subject_mark1、subject_mark2 等,您可能需要使用 explode https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-explode

2) CREATE TABLE 学生(姓名 STRING,subject1 INT,subject2 INT) 行格式分隔 以“,”结尾的字段 存储为序列文件;

3) LOAD DATA INPATH '/path/to/data/students.csv' INTO TABLE 学生;

4) SELECT name, AVG(subject1), AVG(subject2) FROM students GROUP BY name;

输出可能如下所示:

姓名 |主题1 |主题 2

约翰 | 6.2 | 7.0

汤姆| 3.5 | 5.0

【讨论】:

  • 我更喜欢使用 Hbase。我正在研究 hadoop 和相关系统,但我得出的结论是,由于类似 sql 的查询,Hive 在系统上需要一些开销。我不想在 hive 后面使用 mysql,因为现在我的mysql不能处理数据了。
【解决方案3】:

除了作为reducer 运行之外,您还可以将reducer 设置为combiner 运行,这样您就可以在将所有数据发送到reducer 之前执行临时计算。

正如 Nicolas78 所说,您应该考虑使用 pig,它可以很好地构建高效的 map/reduce 并节省您的代码和精力

【讨论】:

  • 好的。。目前我正在使用 combiner。Apache 说它是 hadoop 效率的一部分。
【解决方案4】:

我正在用java编写mapreduce,用逗号分割所有字段,并在key中发送学生姓名,在map的值中发送标记。

在reduce中,我正在处理他们输出key中的学生姓名和他们的分数加上reduce值的总数、平均值等。

这可以很容易地写成一个只有地图的工作,不需要减速器。映射器从 CSV 中获取一行后,将它们拆分并仅在映射器中根据需要进行计算。并发出学生姓名作为键和平均/总计等作为值。

【讨论】:

  • 但是有没有内置的数学函数或 csv 格式化函数?我可以使用并使程序高效。
  • 这与 Hadoop 有什么关系?当然,会有API。发布单独的查询。
猜你喜欢
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多