Приведение столбцов Dataframe с проверкой в ​​spark - PullRequest
3 голосов
/ 21 июня 2019

Мне нужно привести столбец фрейма данных, содержащий значения в виде всей строки к определенным типам данных схемы. Во время приведения мы должны поместить поврежденные записи (записи неправильного типа данных) в отдельный столбец

Пример кадра данных

+---+----------+-----+
|id |name      |class|
+---+----------+-----+
|1  |abc       |21   |
|2  |bca       |32   |
|3  |abab      | 4   |
|4  |baba      |5a   |
|5  |cccca     |     |
+---+----------+-----+

Json Схема файла:

 {"definitions":{},"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://example.com/root.json","type":["object","null"],"required":["id","name","class"],"properties":{"id":{"$id":"#/properties/id","type":["integer","null"]},"name":{"$id":"#/properties/name","type":["string","null"]},"class":{"$id":"#/properties/class","type":["integer","null"]}}}

В этой строке 4 поврежденные записи, поскольку столбец класса имеет тип Integer Таким образом, в поврежденных записях должны быть только эти записи, а не 5-я строка

1 Ответ

2 голосов
/ 24 июня 2019

Просто проверьте, является ли значение NOT NULL перед кастом и NULL после кастинга

import org.apache.spark.sql.functions.when

df
  .withColumn("class_integer", $"class".cast("integer"))
  .withColumn(
    "class_corrupted", 
    when($"class".isNotNull and $"class_integer".isNull, $"class"))

Повторите для каждого нужного столбца / каста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...