1

我有一个 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)
4

2 回答 2

0

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

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

// 根据模式字符串生成模式 val fields = schemaString.split(" "). 地图(fieldName => StructField(fieldName,StringType,可为空的 = true))

val schema = StructType(fields)

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

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

于 2018-04-09T10:52:26.337 回答
0

请查看以下网址了解详情

Spark DataFrame Schema 可空字段

如何将带有 nullable = false 的模式应用于 json 读取

解决方法

val rowDF = spark.read.textFile("mycsv.csv")
    val df= spark.read.schema(customSchema).csv(rowDF)
    df.printSchema()
于 2018-04-09T09:17:55.670 回答