我在csv
使用SQLContext
加载SparkSession
文件时尝试推断架构。请注意,我不想在这里使用class
,因为我在加载数据文件模式时会尽快推断它,因为在加载文件之前我没有关于文件的数据类型或列名的任何信息。
以下是我在Scala中尝试的内容:
package example
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import java.io.File
import org.apache.spark.sql.SparkSession
//import sqlContext.implicits._
object SimpleScalaSpark {
def main(args: Array[String]) {
//val conf = new SparkConf().setAppName("Simple Application").setMaster("local[*]")
val spark = SparkSession
.builder()
.master("local[*]")
.appName("Spark Hive Example")
.config("spark.sql.warehouse.dir", "local")
.getOrCreate()
//val etl1Rdd = spark.sparkContext.wholeTextFiles("etl1.json").map(x => x._2)
val jsonTbl = spark.sqlContext.read.format("org.apache.spark.csv")
.option("header", true)
.option("inferSchema", true)
.option("dateFormat","MM/dd/yyyy HH:mm")
.csv("s1.csv")
// print the inferred schema
jsonTbl.printSchema
}
}
我可以将DateTime
,Integer
,Double
,String
作为我的文件的数据类型。但我想基于我自己的regex
模式实现自定义数据类型,例如SSN,VIN-ID,PhoneNumber等字段,这些模式都具有可以使用regex
检测到的固定模式。这将使我的模式提取过程更加准确和精确。例如,假设我有一个包含由5个或更多字母和2个或更多数字组成的数据的列,我可以说此列的类型为 ID 。
有关使用Scala / Spark是否可以执行此操作的任何想法?如果可能,请告知我实施部分或技术文档的来源。