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 как тип ключа (такой как все виды массивов).

Ниже описано, как сравнивать значения прогноза и метки в комментарии.

Другие вопросы по тегам