Joe*_*Joe 2 schema scala apache-spark
我有10列的CSV文件。Half String和Half是Integers。
什么是Scala代码以:
到目前为止,我有:
import org.apache.spark.sql.SQLContext
val sqlContext = new SQLContext(sc)
val df = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true") // Use first line of all files as header
.option("inferSchema", "true") // Automatically infer data types
.load("cars.csv")
Run Code Online (Sandbox Code Playgroud)
保存该模式的最佳文件格式是什么?是JSON吗?
目标是-我只想创建一次架构,下一次从文件中加载,而不是即时重新创建。
谢谢。
DataType API提供了所有必需的实用程序,因此JSON是自然选择:
import org.apache.spark.sql.types._
import scala.util.Try
val df = Seq((1L, "foo", 3.0)).toDF("id", "x1", "x2")
val serializedSchema: String = df.schema.json
def loadSchema(s: String): Option[StructType] =
Try(DataType.fromJson(s)).toOption.flatMap {
case s: StructType => Some(s)
case _ => None
}
loadSchema(serializedSchema)
Run Code Online (Sandbox Code Playgroud)
根据您的要求,您可以使用标准的Scala方法将其写入文件,或入侵Spark RDD:
val schemaPath: String = ???
sc.parallelize(Seq(serializedSchema), 1).saveAsTextFile(schemaPath)
val loadedSchema: Option[StructType] = sc.textFile(schemaPath)
.map(loadSchema) // Load
.collect.headOption.flatten // Make sure we don't fail if there is no data
Run Code Online (Sandbox Code Playgroud)
对于等效的Python,请参阅配置文件以在PySpark中定义JSON模式结构