Rap*_*oth 4 scala implicits apache-spark
我的Spark代码充满了这样的代码
object Transformations {
def selectI(df:DataFrame) : DataFrame = {
// needed to use $ to generate ColumnName
import df.sparkSession.implicits._
df.select($"i")
}
}
Run Code Online (Sandbox Code Playgroud)
或者
object Transformations {
def selectI(df:DataFrame)(implicit spark:SparkSession) : DataFrame = {
// needed to use $ to generate ColumnName
import sparkSession.implicits._
df.select($"i")
}
}
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么我们需要一个实例SparkSession来导入这些隐式转换。我想做这样的事情:
object Transformations {
import org.apache.spark.sql.SQLImplicits._ // does not work
def selectI(df:DataFrame) : DataFrame = {
df.select($"i")
}
}
Run Code Online (Sandbox Code Playgroud)
有解决这个问题的优雅方法吗?我使用implicits的并不限于$而且Encoders,.toDF()等等。
小智 6
我真的不明白为什么我们只需要一个SparkSession实例来导入这些隐式转换。我想做类似的事情
因为每一个都Dataset存在于特定范围内,SparkSession并且单个Spark应用程序可以具有多个active SparkSession。
从理论上讲,其中一些SparkSession.implicits._可以与会话实例分开存在,例如:
import org.apache.spark.sql.implicits._ // For let's say `$` or `Encoders`
import org.apache.spark.sql.SparkSession.builder.getOrCreate.implicits._ // For toDF
Run Code Online (Sandbox Code Playgroud)
但这会对用户代码产生重大影响。
| 归档时间: |
|
| 查看次数: |
267 次 |
| 最近记录: |