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 的自动转换的主要内容,如果未能解决你的问题,请参考以下文章
如何将类型 <class 'pyspark.sql.types.Row'> 转换为 Vector
《Spark Python API 官方文档中文版》 之 pyspark.sql
nTypeError:无法合并类型 <class \'pyspark.sql.types.DoubleType\'> 和 <class \'pyspark.sql.types.Str