Я практикую некоторые примеры из книги Spark
. В одном из примеров я прочитал некоторые данные из .csv
файлов
val staticDataFrame = spark.read.format("csv")
.option("header", "true")
.option("inferSchema", "true")
.load("/data/retail-data/by-day/*.csv")
затем создайте sql
представление
staticDataFrame.createOrReplaceTempView("retail_data")
val staticSchema = staticDataFrame.schema
затем выполните запрос
import org.apache.spark.sql.functions.{window, column, desc, col}
staticDataFrame
.selectExpr(
"CustomerId",
"(UnitPrice * Quantity) as total_cost",
"InvoiceDate")
.groupBy(
col("CustomerId"), window(col("InvoiceDate"), "1 day"))
.sum("total_cost")
.show(5)
Я получаю следующий вывод
+----------+--------------------+-----------------+
|CustomerId| window| sum(total_cost)|
+----------+--------------------+-----------------+
| 16057.0|[2011-12-05 00:00...| -37.6|
| 14126.0|[2011-11-29 00:00...|643.6300000000001|
| 13500.0|[2011-11-16 00:00...|497.9700000000001|
| 17160.0|[2011-11-08 00:00...|516.8499999999999|
| 15608.0|[2011-11-11 00:00...| 122.4|
+----------+--------------------+-----------------+
затем я изменил размер раздела и снова выполнил тот же запрос. Но я получил другой вывод
scala> spark.conf.set("spark.sql.shuffle.partitions","5");
scala> staticDataFrame.
| selectExpr(
| "CustomerId",
| "(UnitPrice * Quantity) as total_cost",
| "InvoiceDate").
| groupBy(
| col("CustomerId"),window(col("InvoiceDate"),"1 day")).
| sum("total_cost").
| show(5)
+----------+--------------------+------------------+
|CustomerId| window| sum(total_cost)|
+----------+--------------------+------------------+
| 14075.0|[2011-12-05 00:00...|316.78000000000003|
| 18180.0|[2011-12-05 00:00...| 310.73|
| 15358.0|[2011-12-05 00:00...| 830.0600000000003|
| 15392.0|[2011-12-05 00:00...|304.40999999999997|
| 15290.0|[2011-12-05 00:00...|263.02000000000004|
+----------+--------------------+------------------+
only showing top 5 rows
Это ожидаемое поведение. Должен ли вывод быть одинаковым в обоих случаях?