为cassandra创建columnfamilyinputformat的自定义输入格式

ifmq2ha2  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(395)

我正在做一个项目,使用cassandra1.2,hadoop1.2
我已经创建了普通的cassandraMap器和reducer,但是我想创建自己的输入格式类,它将从cassandra读取记录,我将通过使用拆分和索引拆分该值来获得所需列的值,因此,我计划创建自定义格式类。但我很困惑,不知道我该怎么做?要扩展和实现哪些类,以及如何获取行键、列名、列值等。
我的mapperclass如下:

  1. public class MyMapper extends
  2. Mapper<ByteBuffer, SortedMap<ByteBuffer, IColumn>, Text, Text> {
  3. private Text word = new Text();
  4. MyJDBC db = new MyJDBC();
  5. public void map(ByteBuffer key, SortedMap<ByteBuffer, IColumn> columns,
  6. Context context) throws IOException, InterruptedException {
  7. long std_id = Long.parseLong(ByteBufferUtil.string(key));
  8. long newSavePoint = 0;
  9. if (columns.values().isEmpty()) {
  10. System.out.println("EMPTY ITERATOR");
  11. sb.append("column_N/A" + ":" + "N/A" + " , ");
  12. } else {
  13. for (IColumn cell : columns.values()) {
  14. name = ByteBufferUtil.string(cell.name());
  15. String value = null;
  16. if (name.contains("int")) {
  17. value = String.valueOf(ByteBufferUtil.toInt(cell.value()));
  18. } else {
  19. value = ByteBufferUtil.string(cell.value());
  20. }
  21. String[] data = value.toString().split(",");
  22. // if (data[0].equalsIgnoreCase("login")) {
  23. Long[] dif = getDateDiffe(d1, d2);
  24. // logics i want to perform inside my custominput class , rather here, i just want a simple mapper class
  25. if (condition1 && condition2) {
  26. myhits++;
  27. sb.append(":\t " + data[0] + " " + data[2] + " "+ data[1] /* + " " + data[3] */+ "\n");
  28. newSavePoint = d2;
  29. }
  30. }
  31. sb.append("~" + like + "~" + newSavePoint + "~");
  32. word.set(sb.toString().replace("\t", ""));
  33. }
  34. db.setInterval(Long.parseLong(ByteBufferUtil.string(key)), newSavePoint);
  35. db.setHits(Long.parseLong(ByteBufferUtil.string(key)), like + "");
  36. context.write(new Text(ByteBufferUtil.string(key)), word);
  37. }

我想减少Map器类逻辑,并对自定义输入类执行相同的计算。
请帮帮我,我希望斯塔基能做出积极的回应。。。

zengzsys

zengzsys1#

您可以通过将Map器逻辑移动到您的自定义输入类来完成预期的任务(如您已经指出的)
我发现这篇很好的帖子解释了一个和你类似的问题陈述。我想这也许能解决你的问题。

相关问题