Здравствуйте, у меня есть поле массива в снежинке, хранящееся как variant
, и когда я его читаю, я возвращаю его как строку в pyspark. Как я могу преобразовать строку в массив обратно, чтобы применить к ней взрыв?
Ниже ВАРИАНТ из снежинки:
В pyspark я попытался разделить поле и преобразовать его в массив, однако, когда я взрываю массив, значения не являются ожидаемыми строками. Он содержит двойные кавычки и даже квадратную скобку. Я хотел, чтобы вывод был без кавычек и квадратных скобок, как поле массива Pyspark после операции взрыва.
df = df.withColumn("genres", split(col("genres"), ",").cast("array<string>"))
Если вы проверите сопоставления типов данных (от Snowflake до Spark), вы увидите, что тип данных VARIANT сопоставляется с 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]|
+---------------+