pyspark数组的Snowflake变体

mkshixfv  于 2022-12-11  发布在  Spark
关注(0)|答案(1)|浏览(147)

你好,我在snowflake中有一个数组字段,存储为variant,当我读取它时,我在pyspark中将它作为String返回。我如何将字符串转换为数组,以便在它上面应用explode?
下面是来自雪花的VARIANT:

在pyspark中,我尝试拆分字段并将其转换为数组,但是当我分解数组时,值不是预期的字符串。它包含双引号,甚至方括号。我希望输出没有引号和方括号,就像Pyspark数组字段在分解操作后会导致的结果一样。

df = df.withColumn("genres", split(col("genres"), ",").cast("array<string>"))

zlhcx6iw

zlhcx6iw1#

如果检查数据类型Map(从Snowflake到Spark),您会看到VARIANT数据类型Map到StringType:
https://docs.snowflake.com/en/user-guide/spark-connector-use.html#from-snowflake-to-spark-sql
这就是为什么你会有那些引号和方括号。我认为解决办法是在查询表时显式地使用ARRAY_TO_STRING将变量转换为字符串,然后在Spark中将字符串转换为数组:

df = spark.read.format(SNOWFLAKE_SOURCE_NAME) \
  .options(**sfOptions) \
  .option("query",  "select ARRAY_TO_STRING(genres,',') genres from test_v") \
  .load()

df = df.withColumn("genres", split(col("genres"), ",").cast("array<string>"))

df.show()

在我的测试中,它返回以下输出:

+---------------+
|         genres|
+---------------+
|[News, Weather]|
+---------------+

相关问题