Spark: сохранение данных в рамках функции

Я пытаюсь повторно использовать фрейм данных, сохраняя его в функции.

def run() {
  val df1 = getdf1(spark: SparkSession)
  val df2 = getdf2(spark:SparkSession, df1)
}

def getdf1(spark: SparkSession): DataFrame {
  val sqltxt = "select * from emp"
  val df1 = spark.sql(sqltxt)
  df1.persist
  spark.sql("SET spark.sql.hive.convertMetastoreParquet=false")
  df1.write.mode(SaveMode.Overwrite).parquet("/user/user1/emp")
  df1
}

def getdf2(spark: SparkSession, df1: DataFrame): DataFrame {
   // perform some operations
}

Но когда getdf2 выполняется, он снова выполняет все операции. Не уверен, что я здесь что-то не так делаю. Пожалуйста, помогите мне понять сценарий выше. Благодарю.

1 ответ

Я помню, что в scala, когда вы передаете функцию в качестве параметров, функция (в данном случае это df1) будет выполняться каждый раз, когда вы вызываете getdf2. Всякий раз, когда вы вызываете getdf1, все операторы в getdf1 выполнялись снова. Вот почему вы снова видите те же самые операции.

Прочтите главу 5 Первоклассные функции <>

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