火花中的Csv自定义模式

时间:2018-04-09 07:26:09

标签: scala apache-spark spark-csv

我有一个csv文件

  

1577,TRUE,FALSE,FALSE,FALSE,TRUE

我尝试使用自定义架构

加载csv文件
a.b.SomeClass

但是,架构的正常可空性并没有像预期的那样发生变化。

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")

2 个答案:

答案 0 :(得分:0)

请查看以下网址了解详情

  

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()

答案 1 :(得分:0)

  

//创建RDD val rowRDD1 =   spark.sparkContext.textFile(" ../ yourfile.csv&#34)

     

//模式以字符串val schemaString =" id flag1编码   flag2 flag3 flag4 flag5 flag6"

     

//基于schema val fields =的字符串生成模式   schemaString.split("")。                map(fieldName => StructField(fieldName,StringType,nullable = true))

     

val schema = StructType(fields)

     

//将RDD(rowRDD1)的记录转换为行valRDRDD = rowRDD。                地图(_分裂("&#34))。                map(attributes => Row(attributes(0),attributes(1),..,..))

     

//将架构应用于RDD val rowDF =   spark.createDataFrame(rowRDD,schema)