복붙노트

[HADOOP] String 형의 ID가 입력 파일에 대한 Giraph 최선의 정점 입력 형식,

HADOOP

String 형의 ID가 입력 파일에 대한 Giraph 최선의 정점 입력 형식,

나는 다중 노드 giraph 클러스터 내 PC에서 제대로 작동합니다. 나는 Giraph에서 SimpleShortestPathExample을 실행하고 잘 실행했다.

이 알고리즘은이 파일 (tiny_graph.txt)로 달렸다 :

[0,0,[[1,1],[3,3]]]
[1,0,[[0,1],[2,2],[3,1]]]
[2,0,[[1,2],[4,4]]]
[3,0,[[0,3],[1,1],[4,4]]]
[4,0,[[3,4],[2,4]]]

이 파일은 다음과 같은 입력 형식이 있습니다 :

[source_id,source_value,[[dest_id, edge_value],...]]

지금, 나는이 동일한 클러스터에서이 같은 알고리즘을 실행하려고하지만, 원래는 다른 입력 파일을 사용하고 있습니다. 내 자신의 파일은 다음과 같다 :

[Portada,0,[[Sugerencias para la cita del día,1]]]
[Proverbios españoles,0,[]]
[Neil Armstrong,0,[[Luna,1][ideal,1][verdad,1][Categoria:Ingenieros,2,[Categoria:Estadounidenses,2][Categoria:Astronautas,2]]]
[Categoria:Ingenieros,1,[[Neil Armstrong,2]]]
[Categoria:Estadounidenses,1,[[Neil Armstrong,2]]]
[Categoria:Astronautas,1,[[Neil Armstrong,2]]]

그것은 원래 매우 유사하지만, 아이디의이 문자열과 정점과 가장자리 값이 긴 있습니다. 난 이미 org.apache.giraph.io.formats.JsonLongDoubleFloatDoubleVertexInputFormat 및 org.apache.giraph.io.formats.TextDoubleDoubleAdjacencyListVertexInputFormat으로 시도하고 내가이 작업을 얻을 수 있기 때문에 내 질문은, 내가이 사용해야하는 TextInputFormat입니다.

이 문제가 해결로, 난 원래 최단 경로 예 알고리즘을 적용하고 내 파일에 대해 작업 할 수 있습니다,하지만 난 이것에 대한 해결책을 얻을 때까지 나는 그 시점에 도달 할 수 있었다.

i0me 여기에 조언을 요청하는 이유는이 형식은 좋은 결정이 아니라면, 난 아마 적응 수 있습니다,하지만 난 내 최선의 선택, 정말 나쁜 giraph의 텍스트 입력 및 출력 형식에서 내 지식의 알하지, 그건.

해결법

  1. ==============================

    1.그것은 자신의 inputformat를 작성하는 것이 좋습니다. 나는 당신의 문자열을 사용하는 해시 코드를 제안한다. 나는 각 라인이 구성되도록 샘플 코드를 작성 : [(검색 문자열의 정수, 예를 들어 해시 코드) vertex_val (긴) [neighbor_id (정수) vertex_id neighbor_val (길이)], ....]

    그것은 자신의 inputformat를 작성하는 것이 좋습니다. 나는 당신의 문자열을 사용하는 해시 코드를 제안한다. 나는 각 라인이 구성되도록 샘플 코드를 작성 : [(검색 문자열의 정수, 예를 들어 해시 코드) vertex_val (긴) [neighbor_id (정수) vertex_id neighbor_val (길이)], ....]

    public class JsonIntLongIntLongVertexInputFormat extends
      TextVertexInputFormat<IntWritable, LongWritable, LongWritable> {
    
      @Override
      public TextVertexReader createVertexReader(InputSplit split,
          TaskAttemptContext context) {
        return new JsonIntLongIntLongVertexReader();
      }
    
    
      class JsonIntLongIntLongVertexReader extends
        TextVertexReaderFromEachLineProcessedHandlingExceptions<JSONArray,
        JSONException> {
    
        @Override
        protected JSONArray preprocessLine(Text line) throws JSONException     {
          return new JSONArray(line.toString());
        }
    
        @Override
        protected IntWritable getId(JSONArray jsonVertex) throws JSONException,
                  IOException {
          return new IntWritable(jsonVertex.getString(0).hashCode());
        }
    
        @Override
        protected LongWritable getValue(JSONArray jsonVertex) throws
          JSONException, IOException {
          return new LongWritable(jsonVertex.getLong(1));
        }
    
        @Override
        protected Iterable<Edge<IntWritable, LongWritable>> getEdges(
            JSONArray jsonVertex) throws JSONException, IOException {
          JSONArray jsonEdgeArray = jsonVertex.getJSONArray(2);
          List<Edge<IntWritable, LongWritable>> edges =
              Lists.newArrayListWithCapacity(jsonEdgeArray.length());
          for (int i = 0; i < jsonEdgeArray.length(); ++i) {
            JSONArray jsonEdge = jsonEdgeArray.getJSONArray(i);
            edges.add(EdgeFactory.create(new IntWritable(jsonEdge.getString(0).hashCode()),
                new LongWritable(jsonEdge.getLong(1))));
          }
          return edges;
        }
    
        @Override
        protected Vertex<IntWritable, LongWritable, LongWritable>
        handleException(Text line, JSONArray jsonVertex, JSONException e) {
          throw new IllegalArgumentException(
              "Couldn't get vertex from line " + line, e);
        }
    
      }
    }
    
  2. ==============================

    2.나는 org.apache.giraph.io.formats.TextDoubleDoubleAdjacencyListVertexInputFormat에 맞게이 적응하는 내 자신의 파일을 해결했다. 내 원본 파일은 다음과 같이해야합니다 :

    나는 org.apache.giraph.io.formats.TextDoubleDoubleAdjacencyListVertexInputFormat에 맞게이 적응하는 내 자신의 파일을 해결했다. 내 원본 파일은 다음과 같이해야합니다 :

    Portada 0.0     Sugerencias     1.0
    Proverbios      0.0
    Neil    0.0     Luna    1.0     ideal   1.0     verdad  1.0     Categoria:Ingenieros    2.0     Categoria:Estadounidenses       2.0     Categoria:Astronautas   2.0
    Categoria:Ingenieros    1.0     Neil    2.0
    Categoria:Estadounidenses       1.0     Neil    2.0
    Categoria:Astronautas   1.0     Neil    2.0
    

    이 형식은 여러 문자열로 일본어 라인 spliting 토큰에 대한 소정 값에 해당 옵션을 가지기 때문에, 데이터와 그 공간은, 탭 공간 ( '\의 t')이다.

    감사 @의 마수드-sagharichian 어쨌든 당신의 도움을 위해! :디

  3. from https://stackoverflow.com/questions/31712589/giraph-bests-vertex-input-format-for-an-input-file-with-ids-of-type-string by cc-by-sa and MIT license