如何创建一个有类型的空MapType?

时间:2018-07-18 20:36:46

标签: python-2.7 apache-spark pyspark apache-spark-sql

我有一个要匹配的数据框架构,其列类型为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)?

1 个答案:

答案 0 :(得分:0)

我不确定这是否是“正确的方法”,但这是没有@EntityGraph(value = "BookEntity.all", type = EntityGraphType.LOAD) @Query("SELECT x FROM BookEntity x " + "WHERE x IN (" + " SELECT y FROM BookEntity y" + " INNER JOIN y.aliases yt" + " WHERE yt IN (" + " :aliases" + " )" + " GROUP BY y" + " HAVING COUNT( DISTINCT yt) = (" + " :aliasesSize)" + " )") Iterable<BookEntity> findAllByAliasesContainsAll(@Param("aliases") Collection<String> aliases, @Param("aliasesSize") long aliasesSize); 的一种方法:

通过指定架构创建新的数据框,然后执行udf

crossJoin()