spark中的CSV自定义模式[重复]

Posted

技术标签:

【中文标题】spark中的CSV自定义模式[重复]【英文标题】:Csv custom schema in spark [duplicate] 【发布时间】:2018-04-09 07:26:09 【问题描述】:

我有一个 csv 文件

1577,真,假,假,假,真

我尝试使用自定义架构加载 csv 文件,

val customSchema = StructType(Array(
      StructField("id", StringType, nullable = false),
      StructField("flag1", BooleanType, nullable = false),
      StructField("flag2", BooleanType, nullable = false),
      StructField("flag3", BooleanType, nullable = false),
      StructField("flag4", BooleanType, nullable = false),
    StructField("flag6", BooleanType, nullable = false))

    )
    val df =
      spark.read.schema(customSchema).option("header","false").
     option("inferSchema","false").csv("mycsv.csv")

但可正确为空的架构并没有按预期改变。

df.printSchema
root
 |-- id: string (nullable = true)
 |-- flag1: boolean (nullable = true)
 |-- flag2: boolean (nullable = true)
 |-- flag3: boolean (nullable = true)
 |-- flag4: boolean (nullable = true)
 |-- flag6: boolean (nullable = true)

【问题讨论】:

我认为你也需要投射。***.com/questions/40526208/… 另见:***.com/questions/39917075/… 感谢您的帮助。我从这里得到了解决方法***.com/questions/47443483/… 【参考方案1】:

详情请查看以下网址

Spark DataFrame Schema Nullable Fields

How do I apply schema with nullable = false to json reading

解决方法

val rowDF = spark.read.textFile("mycsv.csv")
    val df= spark.read.schema(customSchema).csv(rowDF)
    df.printSchema()

【讨论】:

您可能需要 databricks CSV 库或 Spark >= 2.0 才能做到这一点【参考方案2】:

// 创建一个RDD val rowRDD1 = spark.sparkContext.textFile("../yourfile.csv")

// 模式编码为字符串 val schemaString = "id flag1 标志2标志3标志4标志5标志6"

// 根据模式 val 字段的字符串生成模式 = schemaString.split("")。 map(fieldName => StructField(fieldName, StringType, nullable = true))

val schema = StructType(fields)

// 将 RDD (rowRDD1) 的记录转换为 Rows val rowRDD = rowRDD. 地图(_.split(“,”))。 地图(属性 => 行(属性(0),属性(1),..,..))

// 将模式应用到 RDD val rowDF = spark.createDataFrame(rowRDD, schema)

【讨论】:

以上是关于spark中的CSV自定义模式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spark 将自定义模式应用于 DataFrame

如何以自定义格式加载带有时间戳的 CSV?

如何根据自定义逻辑在 spark 数据框中删除重复行?

Pyspark 解释了使用和不使用自定义模式来读取 csv 的区别

spark-xml 中具有嵌套父节点的自定义模式

spark Spark Streamingkafka数据源Direct模式 自定义数据源