Я читаю источник, в котором описания длиннее 256 символов. Я хочу написать их в Redshift.
Согласно: https://github.com/databricks/spark-redshift#configuring-the-maximum-size-of-string-columns это возможно только в Scala.
Согласно этому: https://github.com/databricks/spark-redshift/issues/137#issuecomment-165904691 это должен быть обходной путь, чтобы указать схему при создании фрейма данных. Я не могу заставить его работать.
Как я могу указать схему с помощью varchar (max)?
df = ...from source
schema = StructType([
StructField('field1', StringType(), True),
StructField('description', StringType(), True)
])
df = sqlContext.createDataFrame(df.rdd, schema)
Аннотации Redshift maxlength
передаются в формате
{"maxlength":2048}
Итак, это структура, которую вы должны передать конструктору StructField
:
from pyspark.sql.types import StructField, StringType
StructField("description", StringType(), metadata = {"maxlength":2048})
или метод псевдонима:
from pyspark.sql.functions import col
col("description").alias("description", metadata = {"maxlength":2048})
Если вы используете PySpark 2.2 или более раннюю версию, проверьте Как изменить метаданные столбца в pyspark? для обходного пути.
Установив это как правильный ответ, даже несмотря на то, что я еще не заставил его работать, он отвечает на мой вопрос. По словам docs.databricks.com/spark/latest/data-sources/aws/…, теперь он также должен работать на python (Databricks недавно закрыли исходный код проекта искрового красного смещения)