gpt4 book ai didi

PySpark - 当值为 "t"和 "f"时如何使用模式读取 BooleanType

转载 作者:行者123 更新时间:2023-12-05 07:39:02 24 4
gpt4 key购买 nike

我使用 StructType 定义了一个架构,用于读取我在 Redsfhit 中拥有的数据的数据帧。该表有 350 多个列,其中许多列配置为 boolean 值。

从该表中卸载数据后,我尝试使用我创建的架构读取数据。但是我期望读取的每个 BooleanType 列都有“f”/“t”值。这会导致解析异常。异常(exception)是:

java.lang.IllegalArgumentException: For input string: "f"
at scala.collection.immutable.StringLike$class.parseBoolean(StringLike.scala:290)
at scala.collection.immutable.StringLike$class.toBoolean(StringLike.scala:260)
at scala.collection.immutable.StringOps.toBoolean(StringOps.scala:30)
at org.apache.spark.sql.execution.datasources.csv.CSVTypeCast$.castTo(CSVInferSchema.scala:270)
at org.apache.spark.sql.execution.datasources.csv.CSVRelation$$anonfun$csvParser$3.apply(CSVRelation.scala:125)
at org.apache.spark.sql.execution.datasources.csv.CSVRelation$$anonfun$csvParser$3.apply(CSVRelation.scala:94)
at org.apache.spark.sql.execution.datasources.csv.CSVFileFormat$$anonfun$buildReader$1$$anonfun$apply$2.apply(CSVFileFormat.scala:167)
at org.apache.spark.sql.execution.datasources.csv.CSVFileFormat$$anonfun$buildReader$1$$anonfun$apply$2.apply(CSVFileFormat.scala:166)
....

有没有办法解决这个问题?我不想将这些列定义为 StringType,然后将它们中的每一个都强制转换为 BooleanType。希望有办法修改 parseBoolean 函数。

*一个不太受欢迎的解决方案也可以来自 Redshift 端,卸载将为 boolean 列提供 boolean 解析的有效值。但同样,我不想对每个 boolean 列都使用“Case When”语句。

提前致谢

最佳答案

当你做 select <fields> FROM * ...你可以使用 case when <field>='f' then True else False end构造,但你必须将它应用到你想成为 boolean 值的每一列。另一种方法是将所有内容加载到数据框,运行 map 函数或 udf 并应用新模式

关于PySpark - 当值为 "t"和 "f"时如何使用模式读取 BooleanType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47432435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com