如何在pyspark中将带有尾随破折号的数字格式化为负数?

elcex8rz  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(361)

我正在使用spark读取一些csv数据(通过指定schema并设置为failfast模式)。数据包含不同的列类型,包括整数。问题是一些整数有尾随破折号而不是前导破折号(324-而不是-324,spark将它们作为字符串)。目前,它无法将这些值解析为整数(如果我从代码中删除failfast模式,它会将所有非整数替换为null):

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

有没有一种简单快捷的方法来指示spark将这些整数作为负数加载并保持failfast模式?

ygya80vv

ygya80vv1#

可以将这些列作为字符串加载,然后转换为整数。

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

df.select(castInt('column1))

相关问题