首页 > 解决方案 > 如何推断现有 Spark Dataframe 的数据类型?

问题描述

我已经将一个长数据框转为宽数据框。这个新的数据框有更多来自枢轴的新变量。这些都是 Spark Dataframe 中的 stringType。如何让 pyspark 重新推断这些新列的数据类型,以便将小数识别为浮点数/双精度数而不是字符串?

背景:每个表的这些新列的数量和透视表的数量太大而无法手动构建模式。

如果有类似于infer_objects()Pandas 的东西,但在 PySpark 中,那就太好了。我不能使用 Pandas,因为该作业位于 AWS Glue Spark 中,它不提供 Pandas 库。

标签: pysparkschemaetlaws-gluepyspark-dataframes

解决方案


好的,就是这样。infer_objects()截至 2020 年 2 月,除了使用表单 Pandas之外,PySpark 中没有解决此问题的方法。如果您因为在 AWS Glue 中而无法使用 Pandas,那么您是幸运的,也是不幸的。不走运 - 因为 Pandas 不可用;recomputeSchema()幸运 - 因为在 Scala 中有更好的东西。

你所要做的就是

  1. 从 DynamicFrame 开始dyf
  2. 移动dyf到Javadyf._jdf
  3. 使用recomputeSchema()Scala 中的方法dyf._jdf.recomputeSchema(),该方法返回一个模式。
  4. toString()用方法和_deserialize_json_string( )函数捕捉模式

代码是

    from awsglue.gluetypes import _deserialize_json_string
    newSchema=_deserialize_json_string( dyf._jdf.recomputeSchema().toString() ) )

然后你可以解决serkan提到的选择。


推荐阅读