Apache spark Spark结构化流媒体中的拼花数据和分割问题

Apache spark Spark结构化流媒体中的拼花数据和分割问题,apache-spark,parquet,spark-structured-streaming,Apache Spark,Parquet,Spark Structured Streaming,我使用Spark结构化流媒体;我的DataFrame具有以下架构 root |-- data: struct (nullable = true) | |-- zoneId: string (nullable = true) | |-- deviceId: string (nullable = true) | |-- timeSinceLast: long (nullable = true) |-- date: date (nullable = true)

我使用Spark结构化流媒体;我的DataFrame具有以下架构

root 
 |-- data: struct (nullable = true) 
 |    |-- zoneId: string (nullable = true) 
 |    |-- deviceId: string (nullable = true) 
 |    |-- timeSinceLast: long (nullable = true) 
 |-- date: date (nullable = true) 
如何使用拼花地板格式进行writeStream并写入数据 (包含zoneId、deviceId、TimesInclast;除日期外的所有内容)并按日期对数据进行分区?我尝试了下面的代码,但PartitionBy子句没有 不行

val query1=df1
.writeStream
.格式(“拼花地板”)
.选项(“路径”,“用户/abc/hb_拼花地板/数据”)
.选项(“检查点位置”,“/Users/abc/hb_拼花地板/检查点”)
.partitionBy(“data.zoneId”)
.start()

我认为您应该尝试方法
重新分区
,它可以接受两种参数:

  • 列名
  • 需要的分区数
我建议使用
重新分区(“日期”)
按日期对数据进行分区


关于这个主题的一个很好的链接:

如果您想按日期进行分区,那么必须在
partitionBy()方法中使用它

val query1=df1
.writeStream
.格式(“拼花地板”)
.选项(“路径”,“用户/abc/hb_拼花地板/数据”)
.选项(“检查点位置”,“/Users/abc/hb_拼花地板/检查点”)
.分割人(“日期”)
.start()
如果要对由
/
构成的数据进行分区,应确保
日期
列为
日期类型
类型,然后创建格式适当的列:

val df=dataset.withColumn(“日期”,dataset.col(“日期”).cast(DataTypes.DateType))
df.withColumn(“年”,functions.date_格式(df.col(“日期”),“YYYY”))
.withColumn(“月”,functions.date_格式(df.col(“日期”),“MM”))
.withColumn(“day”,functions.date_格式(df.col(“date”),“dd”))
.writeStream
.格式(“拼花地板”)
.选项(“路径”,“用户/abc/hb_拼花地板/数据”)
.选项(“检查点位置”,“/Users/abc/hb_拼花地板/检查点”)
.分割人(“年”、“月”、“日”)
.start()