FlinkML: объединение наборов данных LabeledVector не работает
В настоящее время я пытаюсь объединить два DataSets (часть API flink 0.10-SNAPSHOT). Оба DataSet имеют одинаковую форму:
predictions:
6.932018685453303E155 DenseVector(0.0, 1.4, 1437.0)
org:
2.0 DenseVector(0.0, 1.4, 1437.0)
general form:
LabeledVector(Double, DenseVector(Double,Double,Double))
Я хочу создать новый DataSet[(Double,Double)], содержащий только метки двух DataSet, то есть:
join:
6.932018685453303E155 2.0
Поэтому я попробовал следующую команду:
val join = org.join(predictions).where(0).equalTo(0){
(l, r) => (l.label, r.label)
}
Но в результате "join" становится пустым. Я что-то пропустил?
1 ответ
Вы присоединяетесь к полю меток (индекс 0) типа LabeledVector, т. Е. Строите все пары элементов с соответствующими метками. Ваш пример показывает, что вы хотите присоединиться к векторному полю.
Однако, присоединение к векторному полю, например, путем вызова:
org.join(predictions).where("vector").equalTo("vector"){
(l, r) => (l.label, r.label)
}
не будет работать, потому что DenseVector
тип векторного поля не распознается Flink как тип ключа (такой как все виды массивов).
Ниже описано, как сравнивать значения прогноза и метки в комментарии.