使用Spark连接器自定义雪花数据类型的映射

时间:2019-05-29 23:39:06

标签: pyspark pyspark-sql snowflake snowflake-connector-python

使用雪花火花连接器从雪花中复制表格时,默认行为是将结构化数据映射到火花字符串:https://docs.snowflake.net/manuals/user-guide/spark-connector-use.html#from-snowflake-to-spark-sql

例如,给定一个雪花表:

create table schema.table as 
select 
    array_construct('1','a') as array_col,
    object_construct('1','a') as obj_col

并将其复制到pyspark

df = snowflake.sql_context.read.format("snowflake url")\
    .options(**snowflake_options)\
    .load()

得出数据框:

> df: pyspark.sql.dataframe.DataFrame
>   ARRAY_COL:string
>   OBJ_COL:string

当前是否有一种方法可以覆盖连接器中的默认行为,以将雪花OBJECT映射为火花StructType和/或将雪花ARRAY映射为火花MapType? >

2 个答案:

答案 0 :(得分:0)

希望您一切都好,我想您可能正在寻找columnmapping参数。不过,我不是专家,所以我将分享我发现的研究。

专门用于Spark表到Snowflake表 https://docs.snowflake.net/manuals/user-guide/spark-connector-overview.html#column-mapping

对于雪花阵列引发MapType: 对象是否作为数组存储在Snowflake表中? 这是您要找的东西吗? https://sparkbyexamples.com/spark/spark-sql-map-functions/

答案 1 :(得分:0)

“列映射”用于映射列名而不是列类型。对于雪花VARIANT / ARRAY / OBJECT列,返回JSON字符串。应该可以通过UDF将JSON字符串转换为MapType。