【问题标题】:Applying Complex transformation in configurable manner using scala function and spark dataframe使用 scala 函数和 spark 数据框以可配置的方式应用复杂转换
【发布时间】:2021-10-29 00:40:25
【问题描述】:

如何以可配置的方式实现复杂的转换。 我在文件中收到数据,比如 csv、avro 等,这些数据将保持不变,通过这个我将制作一个数据框 现在我需要编写具有不同转换逻辑的不同函数。使用将应用于 dataframe 的 spark scala 。 根据我们使用配置文件传递的参数,特定功能将通过所需的转换执行

我们将通过配置传递的参数将选择相应的功能 请提供任何实现这一点的意见

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    这可以使用 spark 中的transform 函数来完成。

    首先定义执行转换的函数。

    import org.apache.spark.sql.functions._
    import org.apache.spark.sql.DataFrame
    
    def addOne(df: DataFrame) = {
      df.withColumn("plusOne", df("col") + 1)
    }
    
    def addTwo(df: DataFrame) = {
      df.withColumn("plusTwo", df("col") + 2)
    }
    

    然后定义一个测试数据框

    val test = (1 to 10).toDF("col")
    test.show(3, false)
    
    /* outputs:
    
    +---+
    |col|
    +---+
    |1  |
    |2  |
    |3  |
    +---+
    */
    

    然后使用 `transform 函数根据您在配置中的参数进行实际转换。

    val parameter = 1
    val result1 = parameter match {
      case 1 => test.transform(addOne)
      case 2 => test.transform(addTwo)
    }
    
    result1.show(3, false)
    
    /*
    +---+-------+
    |col|plusOne|
    +---+-------+
    |1  |2      |
    |2  |3      |
    |3  |4      |
    +---+-------+
    */
    

    如果parameter 是一个不同的值,您可以在下面看到它的表现。

    
    val parameter = 2
    
    // below code can be extracted into a function
    val result2 = parameter match {
      case 1 => test.transform(addOne)
      case 2 => test.transform(addTwo)
    }
    
    result2.show(3, false)
    
    /*
    Outputs:
    
    +---+-------+
    |col|plusTwo|
    +---+-------+
    |1  |3      |
    |2  |4      |
    |3  |5      |
    +---+-------+
    
    */
    

    【讨论】:

      猜你喜欢
      • 2017-03-07
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      相关资源
      最近更新 更多