[HADOOP] String 형의 ID가 입력 파일에 대한 Giraph 최선의 정점 입력 형식,
HADOOPString 형의 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.그것은 자신의 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.나는 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 어쨌든 당신의 도움을 위해! :디
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
'HADOOP' 카테고리의 다른 글
[HADOOP] 어떻게 HDFS 블록의 크기를 관리합니까? (0) | 2019.09.27 |
---|---|
[HADOOP] 나는 HDFS의 네임 노드를 포맷하려고하지만 말합니다 오전 : 권한이 거부 (0) | 2019.09.27 |
[HADOOP] 어떻게 그룹에 여러 컬럼에 의해 다음 하이브에서 트랜스 (0) | 2019.09.27 |
[HADOOP] 어떻게 하둡에서 사용자 정의 출력 형식을 만들 수 있습니다 (0) | 2019.09.27 |
[HADOOP] 어떻게 사용자 정의 Oozie EL 기능을 사용 HDFS 파일을 읽어 (0) | 2019.09.27 |