Как отформатировать число с конечным da sh до отрицательного числа в pySpark? - PullRequest
1 голос
/ 17 июня 2020

Я читаю некоторые данные CSV с помощью Spark (указав схему и установив режим FAILFAST). Данные содержат столбцы разных типов, включая целые числа. Проблема в том, что некоторые целые числа имеют в конце da sh вместо начального da sh (324- вместо -324, а искра принимает их как строку). В настоящее время он не может анализировать эти значения как целые числа (и если я удалю режим FAILFAST из моего кода, он заменяет все не целые числа на null):

df = spark.read.format("com.databricks.spark.csv")
               .option("sep","\t")
               .option("header", header)
               .option("mode", "FAILFAST")
               .schema(schema)
               .load(path)

Есть ли простой и быстрый способ указать искру для загрузки эти целые числа как отрицательные числа и по-прежнему сохранять режим FAILFAST?

1 Ответ

2 голосов
/ 17 июня 2020

Вы можете загрузить эти столбцы как строки, а затем преобразовать их в целые числа.

def castInt(col: Column) = when(instr(col,"-")>1, concat(lit("-"), trim(col,"-")))
                                   .otherwise(col).cast("INT")

df.select(castInt('column1))
...