Понимание оптимизированного логического плана - PullRequest
0 голосов
/ 24 января 2020

Я читаю этот вопрос и пытаюсь воспроизвести проблему.

Однако я получаю совершенно другой оптимизированный план, чем план операции.

Код операции:

spark.udf.register("inc", (x: Long) => x + 1)
val df = spark.sql("select sum(inc(vals)) from data")
df.explain(true)
df.show()

Оптимизированный план операции:

== Optimized Logical Plan ==
Aggregate [sum(inc(vals#4L)) AS sum(inc(vals))#7L]
+- LocalRelation [vals#4L]

Мой код:

val df1 = spark.read
  .option("sep", "\t")
  .option("inferSchema", "true")
  .option("header", "true")
  .csv("D:/playground/pylearner.tsv")
    .withColumn("Month_year",trim($"Month_year"))

df1.createOrReplaceTempView("pylearner")

df1.show()

spark.udf.register("inc", (x: Long) => x + 1)
val df = spark.sql("select sum(inc(ID)) from pylearner")
df.explain(true)
df.show()

Мой оптимизированный план:

== Optimized Logical Plan ==
Aggregate [sum(if (isnull(cast(ID#10 as bigint))) null else UDF:inc(cast(ID#10 as bigint))) AS sum(UDF:inc(cast(ID as bigint)))#45L]
+- Project [ID#10]
   +- Relation[ID#10,TYPE_ID#11,Month_year#12,Amount#13] csv

1 Ответ

2 голосов
/ 27 января 2020

OP преобразует локальный Seq[Long] в DataFrame. Вы читаете CSV-файл с диска. Следовательно, у OP есть LocalRelation, в то время как у вас есть некоторые дополнительные возможности для чтения в csv, выбора из него столбца ID и обработки, возможно, пропущенных (null) значений.

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