Проверка DataType на DataFrame Scala - PullRequest
0 голосов
/ 01 июля 2019

Мне нужно проверить типы данных DataFrame.

Образец DF

val rawData = Seq((1,"First Rec Col 1" , "First Rec Col 2" ), (1,"Second Rec Col 1" , "Second Rec Col 2")).toDF("Raw_PK" ,"Col1", "Col2")

rawData.show

Результат:

enter image description here

Вот моя схема,

val types = Seq(("Col1", "string"), ("Col2", "double"))

Там написано, что Col1 должно быть типа String, а Col2 должно быть double

Что я пробовал?

Есть несколько способов, которые я попробовал (традиционный способ зацикливания), но хочу избавиться от этого. Итак, вот что я сделал

val df2 = rawData.select(types.map{case (c, t) => col(c).cast(t)} : _*)
df2.show

enter image description here

Он пытается разыграть Col2 String до Double, он показал null in Col2

Я хочу добиться, чтобы в него добавили ДРУГОЕ КОЛОННУ, сказав, что это недопустимая запись для обработки.

Любая помощь? Заранее спасибо.

1 Ответ

0 голосов
/ 01 июля 2019

Вы можете использовать методы, описанные здесь: https://gist.github.com/dennyglee/c21f59cf81216c1dc9a38525a0e41de1

Проверка типа данных на DataFrame Scala

Использование сопоставления с образцом:

import org.apache.spark.sql.types.IntegerType

assert(testDF.schema(col1).dataType match {
  case IntegerType => true
  case _ => false
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...