如何创建类型化的空 MapType?
Posted
技术标签:
【中文标题】如何创建类型化的空 MapType?【英文标题】:How to create a typed empty MapType? 【发布时间】:2018-07-18 20:36:46 【问题描述】:我有一个要匹配的数据框架构,其中包含MapType(StringType(), StringType())
类型的列。我尝试了以下实现(使用 Spark 2.2.1):
import pyspark.sql.functions as fx
from pyspark.sql.types import *
df = spark.createDataFrame([[1]], ['id'])
df = df.withColumn("map", fx.udf(dict, MapType(StringType(), StringType()))())
df = df.withColumn("map2", fx.create_map().cast(MapType(StringType(), StringType())))
没有 udf 的第二次尝试给了我这个转换错误:
cannot resolve 'map()' due to data type mismatch: cannot cast MapType(NullType,NullType,false) to MapType(StringType,StringType,true)
是否有正确的方法来编写第二个实现(没有 UDF)?
【问题讨论】:
这能回答你的问题吗? Scala Spark - empty map on DataFrame column for map(String, Int) 【参考方案1】:我不确定这是否是“正确的方法”,但这里有一种没有udf
的方法:
通过指定架构创建一个新的数据框,并执行crossJoin()
:
df = spark.createDataFrame([[1]], ['id'])
data = [(,)]
schema = StructType([StructField("map2", MapType(StringType(), StringType()))])
df2 = spark.createDataFrame(data, schema)
df.crossJoin(df2).show()
+---+-----+
| id| map2|
+---+-----+
| 1|Map()|
+---+-----+
【讨论】:
以上是关于如何创建类型化的空 MapType?的主要内容,如果未能解决你的问题,请参考以下文章
Spark DataFrame ArrayType 或 MapType 用于检查列中的值