должно ли изменение размера раздела влиять на вывод запроса? - PullRequest
0 голосов
/ 18 января 2019

Я практикую некоторые примеры из книги 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

Это ожидаемое поведение. Должен ли вывод быть одинаковым в обоих случаях?

1 Ответ

0 голосов
/ 18 января 2019

Сколько записей в вашем фрейме данных? это не важно.

Я полагаю, что он работает так, как ожидалось, поскольку вы показываете всего 5 записей, ваш второй запрос возвращает другой набор данных после разбиения.

попробуйте отсортировать по некоторому столбцу и получить первые 5 результатов, он должен дать вам одинаковые результаты до и после разбиения.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...