Как создать схему из файла CSV и сохранить / сохранить эту схему в файл?

У меня есть файл CSV с 10 столбцами. Половина строки и половина являются целыми числами.

Что такое код 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")

И какой формат файла лучше всего подходит для сохранения этой схемы? Это JSON?

Цель - я хочу создать схему только один раз и в следующий раз загрузить файл, а не заново создавать его на лету.

Благодарю.

1 ответ

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)

В зависимости от ваших требований вы можете использовать стандартные методы 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
Другие вопросы по тегам