Spark数据类型猜测UDAF

想要像这样做https://github.com/fitzscott/AirQuality/blob/master/HiveDataTypeGuesser.java,创建一个Hive UDAF来生成一个返回数据类型猜测的聚合函数。

Spark是否已经内置了这样的功能?对于探索新的宽数据集非常有用。对机器学习也很有帮助,例如决定分类变量与数值变量。

您通常如何在Spark中确定数据类型?

P.S. 像h2o这样的框架会自动通过扫描数据样本或整个数据集来确定数据类型。这样就可以决定,例如一个变量是否应该是分类变量还是数值变量。

P.P.S. 另一个用例是,如果你得到一个任意数据集(我们经常遇到这种情况),并且想保存为Parquet表。提供正确的数据库类型可以使Parquet更加节省空间(而且可能在查询时性能更高,例如,比将所有内容存储为字符串/变长字符更好的Parquet布隆过滤器)。


回答:

Spark是否已经内置了这样的功能?

部分是的。Spark生态系统中有一些工具可以执行模式推断,如spark-csvpyspark-csv,以及类别推断(分类与数值)如VectorIndexer

到目前为止还算不错。问题是模式推断的适用性有限,通常不是一件容易的任务,可能会引入难以诊断的问题,并且可能相当昂贵:

  1. 可以与Spark一起使用的格式并不多,可能需要模式推断。实际上,它仅限于CSV的不同变体和固定宽度格式的数据。
  2. 根据数据表示方式,可能无法确定正确的数据类型,或者推断出的类型可能导致信息丢失:

    • 将数值数据解释为浮点数或双精度数可能会导致不可接受的精度损失,特别是在处理金融数据时
    • 日期或数字格式可能因地区不同而异
    • 一些常见的标识符可能看起来像数字,但具有某种内部结构,在转换过程中可能会丢失
  3. 自动模式推断可以掩盖输入数据的不同问题,如果没有额外的工具来突出可能的问题,这可能是危险的。此外,数据加载和清理过程中的任何错误都可能传播到整个数据处理流程中。

    可以说,我们应该在开始考虑可能的表示和编码之前,对输入数据有很好的理解。

  4. 模式推断和/或类别推断可能需要完整的数据扫描和/或大型查找表。这两者在处理大型数据集时可能非常昂贵,甚至不可行。

编辑

看起来CSV文件的模式推断功能已直接添加到Spark SQL中。请参见CSVInferSchema

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注