使用雪花火花连接器从雪花中复制表格时,默认行为是将结构化数据映射到火花字符串: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
? >
答案 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。