스파크의 Dataset의 거대한 컬렉션에서 jaccard와 같은 거리 매트릭스를 계산해야합니다. 직면 한 몇 가지 문제. 친절하게 우리에게 방향을 알려주세요.거대한 작업을 위해 Apache Spark에서 맵 함수 사용
문제 1
import info.debatty.java.stringsimilarity.Jaccard;
//sample Data set creation
List<Row> data = Arrays.asList(
RowFactory.create("Hi I heard about Spark", "Hi I Know about Spark"),
RowFactory.create("I wish Java could use case classes","I wish C# could use case classes"),
RowFactory.create("Logistic,regression,models,are,neat","Logistic,regression,models,are,neat"));
StructType schema = new StructType(new StructField[] {new StructField("label", DataTypes.StringType, false,Metadata.empty()),
new StructField("sentence", DataTypes.StringType, false,Metadata.empty()) });
Dataset<Row> sentenceDataFrame = spark.createDataFrame(data, schema);
// Distance matrix object creation
Jaccard jaccard=new Jaccard();
//Working on each of the member element of dataset and applying distance matrix.
Dataset<String> sentenceDataFrame1 =sentenceDataFrame.map(
(MapFunction<Row, String>) row -> "Name: " + jaccard.similarity(row.getString(0),row.getString(1)),Encoders.STRING()
);
sentenceDataFrame1.show();
없음 컴파일시 오류가 없습니다. 그러나 점점 런타임 예외 같은 :
org.apache.spark.SparkException : 작업 직렬화하지
문제 2
는 또한 우리가하는 우리가 일부를 선언 할 필요가 가장 높은 점수를 가지고하는 쌍을 찾을 필요 변수. 또한 우리는 다른 계산을 수행 할 필요가 있습니다. 우리는 많은 어려움에 직면 해 있습니다.
MapBlock에서 카운터와 같은 간단한 변수를 선언하려고해도 증가 값을 캡처 할 수 없습니다. Map 블록 밖에서 선언하면 컴파일 시간 오류가 많이 발생합니다.
int counter=0;
Dataset<String> sentenceDataFrame1 =sentenceDataFrame.map(
(MapFunction<Row, String>) row -> {
System.out.println("Name: " + row.getString(1));
//int counter = 0;
counter++;
System.out.println("Counter: " + counter);
return counter+"";
},Encoders.STRING()
);
알려주십시오. 감사합니다.