Spark sql 数据框 - 导入 sqlContext.implicits._
Spark sql Dataframe - import sqlContext.implicits._
我有创建 spark 上下文的 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 = {...}
获取 Dataframe 并进行验证和转换:看来我需要
import sqlContext.implicits._
To avoid the error: “value $ is not a member of StringContext”
that happens on line:
.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 的单个实例。您可以在 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._
我有创建 spark 上下文的 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 = {...}
获取 Dataframe 并进行验证和转换:看来我需要
import sqlContext.implicits._
To avoid the error: “value $ is not a member of StringContext” that happens on line: .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 的单个实例。您可以在 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._