Apache spark 如何在pySpark中将尾随破折号的数字格式化为负数?

Apache spark 如何在pySpark中将尾随破折号的数字格式化为负数?,apache-spark,pyspark,Apache Spark,Pyspark,我正在使用Spark读取一些CSV数据(通过指定模式并设置为FAILFAST模式)。数据包含不同的列类型,包括整数。问题是一些整数有尾随破折号而不是前导破折号(324-而不是-324,spark将它们作为字符串)。目前,它无法将这些值解析为整数(如果我从代码中删除FAILFAST模式,它会将所有非整数替换为null): 有没有一种简单快捷的方法可以指示spark将这些整数作为负数加载,并保持FAILFAST模式?您可以将这些列作为字符串加载,然后转换为整数 def castInt(col: Co

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


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

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

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

df.select(castInt('column1))

如果我从代码中删除模式,这将起作用!如果没有模式,spark会将列类型推断为字符串,然后我可以运行此转换将它们转换为整数。
def castInt(col: Column) = when(instr(col,"-")>1, concat(lit("-"), trim(col,"-")))
                                   .otherwise(col).cast("INT")

df.select(castInt('column1))