Мне нужно вычислить сходство между столбцами строки и методом tryons сходства() для получения результатов.Как использовать вывод RowMatrix.columnSimilarities
public static void main(String[] args) {
SparkConf sparkConf = new SparkConf().setAppName("CollarberativeFilter").setMaster("local");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
SparkSession spark = SparkSession.builder().appName("CollarberativeFilter").getOrCreate();
double[][] array = {{5,0,5}, {0,10,0}, {5,0,5}};
LinkedList<Vector> rowsList = new LinkedList<Vector>();
for (int i = 0; i < array.length; i++) {
Vector currentRow = Vectors.dense(array[i]);
rowsList.add(currentRow);
}
JavaRDD<Vector> rows = sc.parallelize(rowsList);
// Create a RowMatrix from JavaRDD<Vector>.
RowMatrix mat = new RowMatrix(rows.rdd());
CoordinateMatrix simsPerfect = mat.columnSimilarities();
RowMatrix mat2 = simsPerfect.toRowMatrix();
List<Vector> vs2 = mat2.rows().toJavaRDD().collect();
List<Vector> vs = mat.rows().toJavaRDD().collect();
System.out.println("mat");
for(Vector v: vs) {
System.out.println(v);
}
System.out.println("mat2");
for(Vector v: vs2) {
System.out.println(v);
}
JavaRDD<MatrixEntry> entries = simsPerfect.entries().toJavaRDD();
JavaRDD<String> output = entries.map(new Function<MatrixEntry, String>() {
public String call(MatrixEntry e) {
return String.format("%d,%d,%s", e.i(), e.j(), e.value());
}
});
output.saveAsTextFile("resources123/data.txt");
}
Но
выход в текстовый файл был 0,2,0.9999999999999998
.
Далее я попробовал тот же самый пример, используя double[][] array = {{1,3}, {2,7}};
Затем вывод текстового файла
был 0,1,0.9982743731749959
Может кто-нибудь объяснить мне ответ format.Can't I получить оценку для каждой пары столбцов матрицы. Так как в матрице 3 на 3 мне нужны 3 оценки для сходства между 1,2 столбцами, 2,3 столбцами, 3,1 столбцами. Любая помощь приветствуется.
Большое спасибо за разъяснение этого. Могу ли я узнать, можно ли использовать наборы данных для вычислений вместо RDD. Согласно моим знаниям, алгоритм ColumnSimilarity еще не перемещен для использования наборов данных. – Shelly
Я понимаю, что 'Dataset' здесь заменить 'Dataframe', а не' RDD', так как они имеют разные базовые реализации с разными вариантами использования. Проверьте [эту статью] (https://databricks.com/blog/2016/07/14/a-tale-of-three-apache-spark-apis-rdds-dataframes-and-datasets.html) для праймера о различиях. –
Большое спасибо. Я проверю это. – Shelly