指定字符串长度超过256的pyspark数据框架构

时间:2018-09-06 10:48:21

标签: apache-spark pyspark apache-spark-sql amazon-redshift

我正在阅读一个源代码,它的描述时间超过了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)

1 个答案:

答案 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?的解决方法。