在AWS Glue中写入Snowflake时对列进行混洗的解决方法如下:
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from pyspark.sql import SparkSession
# 获取作业参数
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
# 创建SparkSession和GlueContext
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
# 创建动态框架
glueContext.create_dynamic_frame.from_catalog(
database = "your_database",
table_name = "your_table"
).toDF().createOrReplaceTempView("input_table")
# 执行混洗操作
shuffled_df = spark.sql("""
SELECT col1, col2, col3
FROM input_table
ORDER BY RAND()
""")
# 将混洗后的数据写入Snowflake
shuffled_df.write.format("net.snowflake.spark.snowflake") \
.option("sfURL", "your_snowflake_url") \
.option("sfDatabase", "your_snowflake_database") \
.option("sfWarehouse", "your_snowflake_warehouse") \
.option("sfSchema", "your_snowflake_schema") \
.option("sfRole", "your_snowflake_role") \
.option("sfUser", "your_snowflake_user") \
.option("sfPassword", "your_snowflake_password") \
.option("dbtable", "your_snowflake_table") \
.mode("overwrite") \
.save()
# 结束作业
glueContext.end_of_job()
将上述代码保存为一个AWS Glue作业脚本,例如shuffle_columns_to_snowflake.py
。
在AWS Glue控制台上创建一个新的作业,并将作业类型设置为"Spark"。
在"Spark脚本"部分上传或引用之前保存的作业脚本文件。
配置作业参数,例如数据库、表名、Snowflake连接信息等。
根据需求配置其他作业设置,例如触发器、调度等。
保存并运行作业,AWS Glue将使用Spark执行混洗操作,并将结果写入Snowflake目标表中。