Получить загрузку схемы данных в таблицу метаданных - PullRequest
1 голос
/ 27 июня 2019

Вариант использования - чтение файла и создание над ним фрейма данных. После этого получите схему этого файла и сохраните в таблицу БД.

Например, я просто создаю класс прецедента.и получение printschema, однако я не могу создать из него фрейм данных

Вот пример кода

case class Employee(Name:String, Age:Int, Designation:String, Salary:Int, ZipCode:Int)

val spark = SparkSession
.builder()
.appName("Spark SQL basic example")
.config("spark.master", "local")
.getOrCreate()

import spark.implicits._
val EmployeesData = Seq( Employee("Anto",   21, "Software Engineer", 2000, 56798))
val Employee_DataFrame = EmployeesData.toDF
val dfschema = Employee_DataFrame.schema

Теперь dfschema является structype и хотел преобразовать его в фрейм данных из двух столбцовкак этого добиться

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Spark> = 2.4.0

Чтобы сохранить схему в строковом формате, вы можете использовать метод toDDL StructType.В вашем случае формат DDL должен быть:

`Name` STRING, `Age` INT, `Designation` STRING, `Salary` INT, `ZipCode` INT

После сохранения схемы вы можете загрузить ее из базы данных и использовать ее как StructType.fromDDL(my_schema), это вернет экземпляр StructType, который вы можете использовать для созданияновый фрейм данных с spark.createDataFrame, как уже упоминалось @Ajay.

Также полезно помнить, что вы всегда можете извлечь схему, заданную классу случая с:

import org.apache.spark.sql.catalyst.ScalaReflection
val empSchema = ScalaReflection.schemaFor[Employee].dataType.asInstanceOf[StructType]

И тогда вы можете получить представление DDL с помощью empSchema.toDDL.

Spark <2,4 </strong>

Для Spark <2,4 используйте <code>DataType.fromDDL и schema.simpleString соответственно.Кроме того, вместо возврата StructType вы должны использовать экземпляр DataType, опуская приведение к StructType следующим образом:

val empSchema = ScalaReflection.schemaFor[Employee].dataType

Пример вывода для empSchema.simpleString:

struct<Name:string,Age:int,Designation:string,Salary:int,ZipCode:int>
0 голосов
/ 28 июня 2019

Попробуйте это -

//-- For local file
val rdd = spark.read.option("wholeFile", true).option("delimiter",",").csv(s"file:///file/path/file.csv").rdd

val schema = StructType(Seq(StructField("Name", StringType, true),
                            StructField("Age", IntegerType, true),
                            StructField("Designation", StringType, true),
                            StructField("Salary", IntegerType, true),
                            StructField("ZipCode", IntegerType, true)))

val df = spark.createDataFrame(rdd,schema)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...