当我加载一个
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等字段,它们都有一个固定的模式,可以使用
正则表达式
。这将使模式提取过程对我来说更加准确和精确。例如,假设我有一个列,其中包含由5个或更多字母和2个或更多数字组成的数据,我可以说这个列是类型
身份证件
.
关于是否可以使用Scala/Spark执行此操作,您有什么想法吗?如果可能,请让我知道实施部分或技术文档的来源。