Python 数据类型到 pyspark.sql.types 的自动转换

Posted

技术标签:

【中文标题】Python 数据类型到 pyspark.sql.types 的自动转换【英文标题】:Python datatypes to pyspark.sql.types auto conversion 【发布时间】:2018-10-15 21:46:52 【问题描述】:

我需要根据列名和数据类型集创建数据框。但数据类型以 str、int、float 等形式给出。但我需要将它们转换为 StructType/StructField 所需的 StringType、IntegerType 等。

我可以创建简单的映射来完成这项工作,但我想知道这些类型是否有任何自动转换?

【问题讨论】:

你能提供一个reproducible example吗?可能有一种更简单的方法,但如果不确切了解您要做什么,就很难判断。 下面是示例,但我有字段名称并在 python 中输入,即 str 和 int。 schema = StructType([ StructField("city", StringType(), True), StructField("country", StringType(), True), StructField("population", IntegerType(), True)]) 【参考方案1】:

我知道它已经很久了,但您可以尝试以下方法:

from pyspark.sql.types import _parse_datatype_string

那么你可以如下使用它:

_parse_datatype_string('int') # Will convert it to IntegerType of pyspark

注意:类型必须是字符串格式

参考:https://spark.apache.org/docs/2.4.0/api/python/_modules/pyspark/sql/types.html

【讨论】:

【参考方案2】:

您可以使用以下函数来做到这一点:

>>> from pyspark.sql.types import _infer_type
>>> _infer_type([1.0, 2.0])
ArrayType(DoubleType,true)

如果您直接在输入中输入类型,您也可以这样做:

>>> my_type = type(42)
>>> _infer_type(my_type())
LongType

最后,如果你只有一个描述python类型的字符串,你可以使用这个:

>>> from pydoc import locate
>>> _infer_type(locate('int'))
LongType

来源:

pyspark.sql.types source code Lexical cast from string to type

【讨论】:

以上是关于Python 数据类型到 pyspark.sql.types 的自动转换的主要内容,如果未能解决你的问题,请参考以下文章

pyspark对Mysql数据库进行读写

如何将类型 <class 'pyspark.sql.types.Row'> 转换为 Vector

具有多种数据类型的 Pyspark SQL 数据帧映射

如何在PySpark中调用python函数?

《Spark Python API 官方文档中文版》 之 pyspark.sql

nTypeError:无法合并类型 <class \'pyspark.sql.types.DoubleType\'> 和 <class \'pyspark.sql.types.Str