我正在阅读一个源代码,它的描述时间超过了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)
答案 0 :(得分:1)
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或更早版本,请检查How to change column metadata in pyspark?的解决方法。