我有一个创建火花上下文的main:
val sc = new SparkContext(sparkConf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._然后创建dataframe,并对dataframe进行筛选和验证。
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 = {...}这将获得Dataframe &验证和转换吗:似乎我需要
import sqlContext.implicits._为了避免错误:“value$不是StringContext的成员”,它发生在网上:.withColumn("time",StringContext)
但是要使用import sqlContext.implicits._,我还需要在新文件中定义的sqlContext,如下所示:
val sc = new SparkContext(sparkConf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)或将其发送到
function ValidateAndTransform(df: DataFrame) : DataFrame = {...}
function我觉得我试图对两个文件进行的分离(主验证)没有正确地完成.
知道怎么设计这个吗?还是简单地将sqlContext发送到函数?
谢谢!
发布于 2015-09-08 15:30:05
您可以使用SQLContext的单个实例。您可以在spark repository中查看这个示例
/** Lazily instantiated singleton instance of SQLContext */
object SQLContextSingleton {
@transient private var instance: SQLContext = _
def getInstance(sparkContext: SparkContext): SQLContext = {
if (instance == null) {
instance = new SQLContext(sparkContext)
}
instance
}
}
...
//And wherever you want you can do
val sqlContext = SQLContextSingleton.getInstance(rdd.sparkContext)
import sqlContext.implicits._ https://stackoverflow.com/questions/32453886
复制相似问题