JavaScript: определите переменную, если она не существует

Думаю, удалось выяснить причину разного результата в Python и Scala.

Причина в оптимизации вещания. Если spark-shell запускается с отключенной трансляцией, Python и Scala работают одинаково.

./spark-shell --conf spark.sql.autoBroadcastJoinThreshold=-1

val df1 = Seq(
  (1, 1, 1)
).toDF("key1", "key2", "time").repartition(3, col("key1"), col("key2"))

val df2 = Seq(
  (1, 1, 1),
  (2, 2, 2)
).toDF("key1", "key2", "time").repartition(3, col("key1"), col("key2"))

val x = df1.join(df2, usingColumns = Seq("key1", "key2", "time"))

x.rdd.getNumPartitions == 200

Похоже, искра 2.4.0 не способна оптимизировать описанный случай из коробки, и необходимо расширение оптимизатора катализатора, как предложено @ user10938362.

Кстати. Вот информация о написании расширений оптимизатора катализатора https://developer.ibm.com/code/2017/11/30/learn-extension-points-apache-spark-extend-spark-catalyst-optimizer/

52
задан eyelidlessness 2 April 2009 в 10:12
поделиться

4 ответа

if (typeof variable === 'undefined') {
    // variable is undefined
    // eg:
    // var variable = "someValue";
}
59
ответ дан Georg Schölly 7 November 2019 в 08:56
поделиться

Это была бы хорошая практика кодирования в этом случае для использования тернарного оператора. Также у Вас не должно быть трех знаков "равно" при сравнении typeof. Это - самое краткое решение:

b = typeof(b) == 'undefined' ? 0 : b;

Это, надо надеяться, сэкономит Вашим рукам некоторое время.

48
ответ дан 7 November 2019 в 08:56
поделиться

Я думаю, что Ваш отправленный код должен работать. Если Ваше исходное значение не 0.

Проблема где-то в другом месте.

Я предполагаю, что Вы определили 'embed_BackgroundColor' из объема Вашего кода. И когда Вы выполняете свой код, та переменная является неопределенной с в пределах Вашего кода и будет присвоена значение по умолчанию.

Вот пример:

var embed_BackgroundColor = "#FF0000";

(function(){
  if(!embed_BackgroundColor) {
    var embed_BackgroundColor;
    embed_BackgroundColor = "#F4F4F4";
  }
  alert(embed_BackgroundColor); // will give you #F4F4F4
})();

alert(embed_BackgroundColor); // will give you #FF0000;
0
ответ дан Aaron Qian 7 November 2019 в 08:56
поделиться

Я предпочитаю общее решение в подобном PHP стиле:

function isset(x) { return typeof(x)!='undefined'; }

0
ответ дан Thinker 7 November 2019 в 08:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: