寻求UDF浮点数转换的帮助

时间:2019-07-09 18:14:51

标签: pyspark apache-spark-sql

我正在使用UDF将模式转换为JSON,并且基于JSON模式,当模式的键“类型”为“数字”时,我需要将输入数据转换为浮点数,例如“收入”类型是数字,输入数据是“ 100”,输出应该是“ 100.0”。但是问题是,如果原始数字是“整数”,则输出将为空。在上面的示例中,输出为“ null”

现在,我有一个临时解决方案是,遍历模式并找到所有键“类型”为“数字”,将键的路径从根到此凯,存储到列表中,然后遍历输入数据,根据路径列表,将数字转换为浮点数。

但是算法的问题是,当键为“ items”时,这意味着该值嵌套在一个数组中,该值中将有多个数字,并且在“ “项目”或“属性”下的“项目”。该算法无法处理所有极端情况。

所以我能知道我是否能得到任何建议,还有没有其他解决方案可以帮助解决UDF整数浮点转换问题?

要添加上下文,请执行以下操作:我们将数据记录从JSON加载到Python字典中,并且某些字段(例如“收入”)具有混合值–在某些记录中,“收入”被解析为整数(例如“ 100”),而在某些“收入”被解析为浮点数(例如“ 100.0”)JSON {“收入”:“ 100”},{“收入”:“ 100.0”}-> Python {“收入”:100},{“收入” :100.0}我们将这些记录作为JSON字符串加载到数据帧中,然后使用pyspark.sql.functions.udf将它们转换为StructType。 int / float混合数字字段标记为FloatType()。 Python {“收入”:100},{“收入”:100.0}-> StructType(FloatType())我们观察到,当PySpark 2.3从“ int”转换为“ FloatType”时,它将诸如“ 100”的整数值强制转换为“空”而不是“ 100.0”。已观察到:Python 100-> FloatType null期望:Python 100-> FloatType 100.0在Scala中,此行为也可能成立。我们目前正在尝试通过在Python函数内部添加逻辑以在从UDF返回之前将所有整数递归转换为浮点数来解决此问题,以解决此问题。我们不想引入这种自定义且容易出错的逻辑。

该社区的成员是否在PySpark或Scala中遇到了此问题?如果是这样,您如何解决?

PySpark中是否有一种方法可以将Python整数(例如“ 100”)隐式转换为PySpark FloatType(例如“ 100.0”)?

0 个答案:

没有答案