【发布时间】:2016-06-15 19:09:04
【问题描述】:
我有创建火花上下文的 main:
val sc = new SparkContext(sparkConf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
然后创建数据框并对数据框进行过滤和验证。
val convertToHourly = udf((time: String) => time.substring(0, time.indexOf(':')) + ":00:00")
val df = sqlContext.read.schema(struct).format("com.databricks.spark.csv").load(args(0))
// record length cannot be < 2
.na.drop(3)
// round to hours
.withColumn("time",convertToHourly($"time"))
这很好用。
但是当我尝试通过将数据帧发送到
来将我的验证移动到另一个文件时function ValidateAndTransform(df: DataFrame) : DataFrame = {...}
获取数据框并进行验证和转换:看来我需要
import sqlContext.implicits._
为避免错误:“值 $ 不是 StringContext 的成员” 在线发生: .withColumn("time",convertToHourly($"time"))
但是要使用import sqlContext.implicits._
我还需要在新文件中定义的sqlContext,如下所示:
val sc = new SparkContext(sparkConf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
或发送到
function ValidateAndTransform(df: DataFrame) : DataFrame = {...}
function
我觉得我尝试对 2 个文件(主要和验证)进行的分离没有正确完成......
关于如何设计这个的任何想法?还是干脆将 sqlContext 发送给函数?
谢谢!
【问题讨论】:
-
当我想分离类似的东西时,我只需在新类的构造函数中传递 SQLContext,然后为每个类导入一次 sqlContext.implicits._。我想不出更好的办法,所以我投票赞成这个问题并等待更好的建议。
标签: apache-spark-sql spark-dataframe