Вы можете сделать это (в Scala напишите эквивалентный pyspark):
val new_X_test3 = X_test3
.join(X_train3
.select("street")
.distinct()
.withColumnRenamed("street","street_train"),
col("street") === col("street_train"),
"leftouter")
.withColumn("street_test",
when(col("street_train").isNull, lit("1"))
.otherwise(col("street")))
.drop("street","street_train")
.withColumnRenamed("street_test","street")
Также, если вы уверены, что список уникальных улиц очень мал (так как вы пытались собрать его в драйвере в своем коде), вы можете предоставить подсказку broadcast
около X_train3
. Таким образом, код становится:
val new_X_test3 = X_test3
.join(broadcast(X_train3
.select("street")
.distinct()
.withColumnRenamed("street","street_train")),
col("street") === col("street_train"),
"leftouter")
.withColumn("street_test",
when(col("street_train").isNull, lit("1"))
.otherwise(col("street")))
.drop("street","street_train")
.withColumnRenamed("street_test","street")