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