pyspark - 如何推断现有 Spark Dataframe 的数据类型?
问题描述
我已经将一个长数据框转为宽数据框。这个新的数据框有更多来自枢轴的新变量。这些都是 Spark Dataframe 中的 stringType。如何让 pyspark 重新推断这些新列的数据类型,以便将小数识别为浮点数/双精度数而不是字符串?
背景:每个表的这些新列的数量和透视表的数量太大而无法手动构建模式。
如果有类似于infer_objects()
Pandas 的东西,但在 PySpark 中,那就太好了。我不能使用 Pandas,因为该作业位于 AWS Glue Spark 中,它不提供 Pandas 库。
解决方案
好的,就是这样。infer_objects()
截至 2020 年 2 月,除了使用表单 Pandas之外,PySpark 中没有解决此问题的方法。如果您因为在 AWS Glue 中而无法使用 Pandas,那么您是幸运的,也是不幸的。不走运 - 因为 Pandas 不可用;recomputeSchema()
幸运 - 因为在 Scala 中有更好的东西。
你所要做的就是
- 从 DynamicFrame 开始
dyf
- 移动
dyf
到Javadyf._jdf
- 使用
recomputeSchema()
Scala 中的方法dyf._jdf.recomputeSchema()
,该方法返回一个模式。 toString()
用方法和_deserialize_json_string( )
函数捕捉模式
代码是
from awsglue.gluetypes import _deserialize_json_string
newSchema=_deserialize_json_string( dyf._jdf.recomputeSchema().toString() ) )
然后你可以解决serkan提到的选择。
推荐阅读
- javascript - 刮
之间的标签
- python - 读取文件内容时在列表中创建列表的程序
- typescript - 如何使用类型推断正确地为`express.Response`进行声明合并
- python - 在 matplotlib 中从数据坐标转换为轴坐标
- ibm-mq - 如何将 IBM MQ 配置为 HA 集群?
- angular - 从两个不同的组件调用通用的通用 html
- regex - 我的 RewriteRule 有问题吗?反向引用似乎表现得很奇怪
- directory - ls 和 dir 在 debian 10 上没有显示任何内容
- maven - 并行构建不适用于发布插件
- python - 如何使用Python中的输入更改while循环中的范围?