Альтернатива использованию функции withColumn в Spark Scala - PullRequest
0 голосов
/ 27 мая 2019

Я проверяю код разработки и мне нужно избегать или использовать другой способ добавления столбцов с использованием функции 'withColumn' в кадре данных; но у меня есть следующие сомнения:

  1. Используя вложенные 'withColumn', создавать новые таблицы (как показано ниже)? используя 6 'withColumn', создать 6 новых таблиц в памяти?
newDataframe = table
.withColumn("name", col("consolidate").cast(DecimalType(17,2)))
.withColumn("name", col("consolidate").cast(DecimalType(17,2)))
  1. Если использование множества withColumn увеличивает использование памяти и снижает производительность (если true), как я могу избежать использования withColumn при добавлении столбцов в фрейм данных и получении того же результата?

  2. Есть ли способ, который потребляет меньше памяти и быстрее запускается без использования withColumn, но с тем же результатом? То есть кадр данных с 6 добавленными столбцами

Я не знаю, как это сделать.

Код для оптимизации выглядит так:

def myMethod(table: DataFrame): DataFrame = {
    newDataframe = table
      .withColumn("name", col("consolidate").cast(DecimalType(17,2)))
      .withColumn("id_value", col("east").cast(DecimalType(17,2)))
      .withColumn("x_value", col("daily").cast(DecimalType(17,2)))
      .withColumn("amount", col("paid").cast(DecimalType(17,2)))
      .withColumn("client", col("lima").cast(DecimalType(17,2)))
      .withColumn("capital", col("econo").cast(DecimalType(17,2)))
    newDataframe
  }

1 Ответ

0 голосов
/ 28 мая 2019

Здесь есть неправильное представление: Spark не создает 6 промежуточных наборов данных в памяти. Фактически ваша функция не будет вызывать никаких изменений в памяти, поскольку преобразования Spark (например, withColumn) оцениваются лениво только при вызове действия (например, .count() или .show()).

Когда действие называется Spark, оно оптимизирует ваши преобразования и выполнит их все сразу, поэтому не будет проблем с 6-кратным вызовом .withColumn в терминах памяти.

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