Pyspark 添加字符串类型的空文字映射

Ala*_*rik 3 apache-spark pyspark

这个问题类似,我想在我的 pyspark DataFrame 中添加一列,其中只包含一个空地图。但是,如果我使用该问题的建议答案,则地图的类型为<null,null>,与那里发布的答案不同。

from pyspark.sql.functions import create_map
spark.range(1).withColumn("test", create_map()).printSchema()

root
 |-- test: map(nullable = false)
 |    |-- key: null
 |    |-- value: null (valueContainsNull = false)
Run Code Online (Sandbox Code Playgroud)

我需要一张空<string,string>地图。我可以在 Scala 中这样做:

import org.apache.spark.sql.functions.typedLit
spark.range(1).withColumn("test", typedLit(Map[String, String]())).printSchema()

root
 |-- test: map(nullable = false)
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)
Run Code Online (Sandbox Code Playgroud)

我怎样才能在pyspark中做到这一点?我在 Databricks Runtime 7.3 LTS 上使用 Spark 3.01 和底层 Scala 2.12。我需要<string,string>地图,因为否则我无法将数据框保存到镶木地板:

AnalysisException: Parquet data source does not support map<null,null> data type.;
Run Code Online (Sandbox Code Playgroud)

Nit*_*ish 5

您可以将地图转换为使用创建地图的适当类型create_map


from pyspark.sql.functions import create_map
spark.range(1).withColumn("test", create_map().cast("map<string,string>")).printSchema()

root
 |-- id: long (nullable = false)
 |-- test: map (nullable = false)
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)
Run Code Online (Sandbox Code Playgroud)