У меня есть Spark 2.0.0 Dataset с колонкой Foo
объектов, например, val ds: Dataset[(int, Foo, int)]
. Bar
- экстрактор Foo
. Я хотел бы иметь возможность добавить столбец, построенный с использованием оператора match-case (или любого произвольно сложного оператора). Что-то вроде этого: ds.withColumn("extracted", $"_2" match { case Bar(x) => x })
. Каков наилучший способ добиться такого поведения в Spark?Применить матч-кейс в колонку искры?
Update:
@ T.Gawęda и @ zero323 - Спасибо вам обоим за ваши содержательные комментарии. Я думаю, что мой ответ кроется в этом предложении: «Невозможно погладить матч за Column
, чтобы извлечь данные». Я действительно использовал Dataset[Row]
, но я слишком упростил до Dataset[(int, Foo, int)]
. Причина, по которой я склонялся к использованию withColumn
, а не map
, был потому, что (1) я пытался избежать ссылки на любой из других столбцов (они не фигурировали в функции совпадения), и (2) я хотел ссылаться на Foo/Bar по имени (поскольку местоположение столбца в было неизвестно).
Это не сработает. UDF получит тип SQL, а не 'Bar'. «Карта» будет работать, конечно. – zero323
@ zero323 проверить мой пример, я запустил его, и он работает. Я что-то пропустил? –
Одна вещь, попробуйте выполнить это :) ('show',' first'). Здесь существует безопасность типов, поэтому он просто не работает во время выполнения. – zero323