Недостатки набора данных Spark по сравнению с DataFrame - PullRequest
2 голосов
/ 20 марта 2019

Я знаю преимущества Dataset (безопасность типов и т. Д.), Но я не могу найти никакой документации, связанной с Ограничения наборов данных Spark .

Существуют ли конкретные сценарии, в которых Spark Dataset равен , не рекомендуется и лучше использовать DataFrame.

В настоящее время все наши процессы обработки данных используют Spark (Scala) DataFrame. Мы хотели бы использовать Dataset для всех наших новых потоков. Так что знание всех ограничений / недостатков Dataset поможет нам.

РЕДАКТИРОВАТЬ: Это не похоже на Набор данных Spark 2.0 против DataFrame , который объясняет некоторые операции с Dataframe / Dataset. или другие вопросы, которые в большинстве из них объясняют различия между rdd, dataframe и набором данных и тем, как они развивались. Это цель знать, когда НЕ использовать наборы данных

1 Ответ

1 голос
/ 20 марта 2019

Есть несколько сценариев, в которых я считаю, что Dataframe (или Dataset [Row]) более полезен, чем типизированный набор данных.

Например, когда я потребляю данные без фиксированной схемы, напримерJSON-файлы, содержащие записи разных типов с разными полями.Используя Dataframe, я могу легко «выбрать» нужные мне поля, не зная всей схемы, или даже использовать конфигурацию времени выполнения, чтобы указать поля, к которым я получу доступ.

Другое соображение заключается в том, что Spark может лучшеоптимизировать встроенные в Spark SQL операции и агрегаты, чем UDAF и пользовательские лямбды.Поэтому, если вы хотите получить квадратный корень из значения в столбце, это встроенная функция (df.withColumn("rootX", sqrt("X"))) в Spark SQL, но выполнение в лямбде (ds.map(X => Math.sqrt(X))) будет менее эффективным, поскольку Spark не можетоптимизировать вашу лямбда-функцию так же эффективно.

Существует также множество нетипизированных функций Dataframe (например, статистических функций), которые реализованы для Dataframes, но не для типизированных наборов данных, и вы часто обнаружите, что даже если вы начинаете с набора данных, к тому времени, как выЗакончив агрегирование, вы остаетесь с Dataframe, потому что функции работают путем создания новых столбцов, изменения схемы вашего набора данных.

В общем, я не думаю, что вам следует переходить с рабочего кода Dataframe на типизированные наборы данных, если толькоу тебя есть веская причина.Многие функции набора данных по-прежнему помечены как «экспериментальные» в Spark 2.4.0, и, как уже упоминалось выше, не все функции Dataframe имеют эквиваленты набора данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...