从镶木地板中自动推断模式/选择性地将字符串转换为

时间:2018-02-02 07:12:27

标签: apache-spark pyspark parquet pyspark-sql

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

我无法找到类似于

的参数
SaaS

我尝试过更改

inferSchema=True' #for spark.read.parquet, present for spark.read.csv

要手动将列转换为float,我使用

mergeSchema=True #but it doesn't improve the results

运行时没有错误,但将所有实际的字符串列值转换为Null。我不能在try,catch块中包装它,因为它不会抛出任何错误。

有没有办法可以检查列是否只包含'整数/浮点数'值并选择性地将这些列转换为float?

2 个答案:

答案 0 :(得分:1)

Parquet列是类型化的,因​​此在加载Parquet文件时不存在模式推断。

  

有没有办法可以检查列是否只包含'整数/浮点数'值并选择性地将这些列转换为float?

您可以使用与Spark相同的逻辑 - 定义首选类型层次结构并尝试强制转换,直到找到最具选择性类型的点,即解析列中的所有值。

答案 1 :(得分:0)

目前还不容易, 已经存在的Github问题可以参考

https://github.com/databricks/spark-csv/issues/264

https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/csv/CSVInferSchema.scala

这样的东西

现存为scala,可以为pyspark创建