Думаю, удалось выяснить причину разного результата в 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/
if (typeof variable === 'undefined') {
// variable is undefined
// eg:
// var variable = "someValue";
}
Это была бы хорошая практика кодирования в этом случае для использования тернарного оператора. Также у Вас не должно быть трех знаков "равно" при сравнении typeof. Это - самое краткое решение:
b = typeof(b) == 'undefined' ? 0 : b;
Это, надо надеяться, сэкономит Вашим рукам некоторое время.
Я думаю, что Ваш отправленный код должен работать. Если Ваше исходное значение не 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;
Я предпочитаю общее решение в подобном PHP стиле:
function isset(x) { return typeof(x)!='undefined'; }