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自定义模式[重复]的主要内容,如果未能解决你的问题,请参考以下文章