想要拍这样的东西 https://github.com/fitzscott/AirQuality/blob/master/HiveDataTypeGuesser.java 并创建一个 Hive UDAF 来创建一个返回数据类型猜测的聚合函数。
Spark 是否已经内置了类似的功能? 对于探索数据的新的广泛数据集非常有用。对机器学习也有帮助,例如决定分类变量还是数值变量。
您通常如何确定 Spark 中的数据类型?
附注像 h2o 这样的框架会自动确定扫描数据样本或整个数据集的数据类型。那么人们就可以决定,例如变量是否应该是分类变量或数值变量。
P.P.S。另一个用例是,如果您获得任意数据集(我们经常获得它们),并且想要保存为 Parquet 表。 提供正确的数据类型可以使 parquet 更加节省空间(并且可能具有更高的查询时间性能,例如 比仅将所有内容存储为 string/varchar 更好的 Parquet 布隆过滤器)。
最佳答案
Does Spark have something like this already built-in?
部分。 Spark 生态系统中有一些工具可以执行模式推理,例如 spark-csv
或pyspark-csv
和类别推断(分类与数字),例如 VectorIndexer
.
到目前为止一切顺利。问题是模式推断的适用性有限,一般来说不是一件容易的事,可能会带来难以诊断的问题,而且成本可能相当昂贵:
- 可用于 Spark 的格式并不多,并且可能需要架构推断。实际上,它仅限于 CSV 和固定宽度格式数据的不同变体。
根据数据表示形式,可能无法确定正确的数据类型,或者推断的类型可能会导致信息丢失:
- 将数值数据解释为浮点型或 double 型可能会导致 Not Acceptable 精度损失,尤其是在处理财务数据时
- 日期或数字格式可能因区域设置而异
- 一些常见标识符可能看起来像数字,但具有一些可能在转换过程中丢失的内部结构
自动模式推断可以掩盖输入数据的不同问题,如果没有可以突出显示可能问题的其他工具的支持,则可能会很危险。此外,数据加载和清理期间的任何错误都可以通过完整的数据处理管道传播。
可以说,在我们开始考虑可能的表示和编码之前,我们应该对输入数据有很好的理解。
模式推断和/或类别推断可能需要完整的数据扫描和/或大型查找表。对于大型数据集来说,这两种方法都可能很昂贵,甚至不可行。
编辑:
看起来 CSV 文件的模式推断功能已直接添加到 Spark SQL 中。请参阅CSVInferSchema
.
关于apache-spark - Spark数据类型猜测器UDAF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32722132/