Когда использовать Spark DataFrame / Dataset API, а когда использовать обычный RDD?
Механизм исполнения Spark SQL DataFrame / Dataset имеет несколько чрезвычайно эффективных способов оптимизации времени и пространства (например, InternalRow и выражение codeGen). Согласно многим документациям, для большинства распределенных алгоритмов этот вариант лучше, чем RDD.
Тем не менее, я провел некоторые исследования исходного кода и до сих пор не убежден. Я не сомневаюсь, что InternalRow намного компактнее и может сохранить большой объем памяти. Но выполнение алгоритмов может не ускорить сохранение предопределенных выражений. А именно это указано в исходном кодеorg.apache.spark.sql.catalyst.expressions.ScalaUDF
, что каждая пользовательская функция делает 3 вещи:
По-видимому, это даже медленнее, чем просто применять функцию непосредственно к СДР без какого-либо преобразования. Может ли кто-нибудь подтвердить или опровергнуть мои предположения с помощью профилирования и анализа кода?
Большое спасибо за любое предложение или понимание.