【发布时间】:2019-01-16 12:46:28
【问题描述】:
下面我提供了我的架构和用于从 hdfs 中的分区读取的代码。
一个分区的例子可以是这个路径:/home/maria_dev/data/key=key/date=19 jan(当然在这个文件夹里面有一个包含cnt的csv文件)
因此,我拥有的数据按key 和date 列进行分区。
当我像下面这样阅读时,列未正确阅读,因此cnt 被读入date,反之亦然。
我该如何解决这个问题?
private val tweetSchema = new StructType(Array(
StructField("date", StringType, nullable = true),
StructField("key", StringType, nullable = true),
StructField("cnt", IntegerType, nullable = true)
))
// basePath example: /home/maria_dev/data
// path example: /home/maria_dev/data/key=key/data=19 jan
private def loadDF(basePath: String, path: String, format: String): DataFrame = {
val df = spark.read
.schema(tweetSchema)
.format(format)
.option("basePath", basePath)
.load(path)
df
}
我尝试将它们在架构中的顺序从 (date, key, cnt) 更改为 (cnt, key, date),但这没有帮助。
我的问题是,当我调用 union 时,它会附加 2 个数据帧:
- df1:
{(key: 1, date: 2)} - df2:
{(date: 3, key: 4)}
像这样进入最终数据框:{(key: 1, date: 2), (date: 3, key: 4)}。正如你所看到的,这些列是乱七八糟的。
【问题讨论】:
标签: apache-spark apache-spark-sql