Я пытаюсь определить схему при загрузке файла 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?Пожалуйста, дайте мне знать часть реализации, если это возможно, или источник технической документации.