Apache spark 从拼花地板自动推断模式/有选择地将字符串转换为浮点

Apache spark 从拼花地板自动推断模式/有选择地将字符串转换为浮点,apache-spark,pyspark,parquet,pyspark-sql,Apache Spark,Pyspark,Parquet,Pyspark Sql,我有一个包含400多列的拼花文件,当我阅读它时,附加到许多列的默认数据类型是String,这可能是由于其他人指定的模式 我找不到类似的参数 inferSchema=True' #for spark.read.parquet, present for spark.read.csv 我试着换衣服 mergeSchema=True #but it doesn't improve the results 要手动将列转换为float,我使用 df_temp.select(*(col(c).cast("

我有一个包含400多列的拼花文件,当我阅读它时,附加到许多列的默认数据类型是String,这可能是由于其他人指定的模式

我找不到类似的参数

inferSchema=True' #for spark.read.parquet, present for spark.read.csv
我试着换衣服

mergeSchema=True #but it doesn't improve the results
要手动将列转换为float,我使用

df_temp.select(*(col(c).cast("float").alias(c) for c in df_temp.columns))
此操作运行时不会出错,但会将所有实际字符串列值转换为Null。我不能用try,catch块来包装它,因为它不会抛出任何错误


是否有一种方法可以检查列是否只包含“integer/float”值,并有选择地将这些列强制转换为float?

拼花列是键入的,因此在加载拼花文件时没有模式推断这样的事情

是否有一种方法可以检查列是否只包含“整型/浮点型”值,并有选择地将这些列强制转换为浮点型

您可以使用与Spark-define preferred type hierarchy相同的逻辑,并尝试强制转换,直到找到解析列中所有值的选择性最强的类型为止


目前没有简单的方法, 已经存在一个Github问题,可以参考

糟糕的


针对scala的现有版本可为pyspark创建此版本

stackoverflow阻止我在回答此问题后询问更多信息,有何建议如何改进此版本?