Spark SQL - Cadena de consulta de escape

No puedo creer que te pregunte esto pero ...

¿CÓMO ESCAPAR UNA CADENA DE CONSULTA SQL EN SPARK SQL UTILIZANDO SCALA?

He cansado todo y buscado en todas partes. Pensé que la biblioteca de apache commons lo haría, pero no tuve suerte:

import org.apache.commons.lang.StringEscapeUtils

var sql = StringEscapeUtils.escapeSql("'Ulmus_minor_'Toledo'");

df.filter("topic = '" + sql + "'").map(_.getValuesMap[Any](List("hits","date"))).collect().foreach(println);

devuelve lo siguiente:

topic = '' 'Ulmus_minor _' 'Toledo' '' ^ en scala.sys.package $ .error (package.scala: 27) en org.apache.spark.sql.catalyst.SqlParser.parseExpression (SqlParser.scala: 45) en org.apache.spark.sql.DataFrame.filter (DataFrame.scala: 651) a $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC. (: 29 ) a $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC. (: 34) a $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC. (: 36) a $ iwC $ iwC $ iwC $ iwC $ iwC $ iwC. (: 38) a $ iwC $ iwC $ iwC $ iwC $ iwC. (: 40) a $ iwC $ iwC $ iwC $ iwC. (: 42) a $ iwC $ iwC $ iwC. (: 44) a $ iwC $ iwC. (: 46) a $ iwC. (: 48) a (: 50) en. (: 54) en. () En. (: 7) en. () En $ print () en sun.reflect.NativeMethodAccessorImpl.invoke0 (Método nativo) en sun.reflect.NativeMethodAccessorImpl.invoke ( NativeMethodAccessorImpl.java:62) en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) en java.lang.reflect.Method.invoke (Method.java:497) en org.apache.spark.repl.SparkIMaint $ Read .call (SparkIMain.scala: 1065) en org.apache.spark.repl.SparkIMain $ Request.loadAndRu n (SparkIMain.scala: 1338) en org.apache.spark.repl.SparkIMain.loadAndRunReq $ 1 (SparkIMain.scala: 840) en org.apache.spark.repl.SparkIMain.interpret (SparkIMain.scala: 871) en org. apache.spark.repl.SparkIMain.interpret (SparkIMain.scala: 819) en org.apache.spark.repl.SparkILoop.reallyInterpret $ 1 (SparkILoop.scala: 857) en org.apache.spark.repl.SparkILoop.interpretStartoWith (SpaILOop.interpretStartingWith .scala: 902) en org.apache.spark.repl.SparkILoop.command (SparkILoop.scala: 814) en org.apache.spark.repl.SparkILoop.processLine $ 1 (SparkILoop.scala: 657) en org.apache.spark .repl.SparkILoop.innerLoop $ 1 (SparkILoop.scala: 665) en org.apache.spark.repl.SparkILoop.org $ apache $ spark $ repl $ SparkILoop $ loop (SparkILoop.scala: 670) en org.apache.spark .repl.SparkILoop $ anonfun $ org $ apache $ spark $ repl $ SparkILoop $ process $ 1.apply $ mcZ $ sp (SparkILoop.scala: 997) en org.apache.spark.repl.SparkILoop $ anonfun $ org $ apache $ spark $ repl $ SparkILoop $ process $ 1.apply (SparkILoop.scala: 945) en org.apache.spark.repl.SparkILoop $ anonfun $ org $ apache $ spark $ r epl $ SparkILoop $ process $ 1.apply (SparkILoop.scala: 945) en scala.tools.nsc.util.ScalaClassLoader $ .savingContextLoader (ScalaClassLoader.scala: 135) en org.apache.spark.repl.SparkILoop.org $ apache $ spark $ repl $ SparkILoop $ proceso (SparkILoop.scala: 945) en org.apache.spark.repl.SparkILoop.process (SparkILoop.scala: 1059) en org.apache.spark.repl.Main $ .main (Main .scala: 31) en org.apache.spark.repl.Main.main (Main.scala) en sun.reflect.NativeMethodAccessorImpl.invoke0 (Método nativo) en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) en java.lang.reflect.Method.invoke (Method.java:497) en org.apache.spark.deploy.SparkSubmit $ .org $ apache $ spark $ deploy $ SparkSubmit $ runMain (SparkSubmit.scala: 665) en org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1 (SparkSubmit.scala: 170) en org.apache.spark.deploy.SparkSubmit $ .submit (SparkSubmit.scala : 193) en org.apache.spark.deploy.SparkSubmit $ .main (SparkSub mit.scala: 112) en org.apache.spark.deploy.SparkSubmit.main (SparkSubmit.scala)

La ayuda sería genial.

j

Respuestas a la pregunta(2)

Su respuesta a la pregunta