Իմ սցենարը բացատրվում է ստորև.- (Ստորև փորձը փորձարկվել է Spark Shell-ով)
Ես ունեմ Տվյալների շրջանակ, որը պարունակում է հաճախորդի ID և հաճախորդի անուն սյունակներ: Այժմ ես ուզում եմ դրա վրա հավելվածի գործողություն կատարել Spark UDF-ի միջոցով:
Ստորև բերված օրինակ :-
case class Customer(customerId: Int, customerName: String)
val x = sc.parallelize(Array(Customer(123, "User1"),Customer(456, "User2")))
val df = sqlContext.createDataFrame(x)
df.registerTempTable("df")
Վերը նշված քայլերը կստեղծեն Տվյալների շրջանակ և կգրանցվեն «df» անունով:
Այժմ գրանցեք Spark UDF (հավելված)
sqlContext.udf.register("append", (s: String, p1: String) => { if (s != null) s + p1 else p1 })
Այնուհետև ես արժեքը վերագրում եմ փոփոխականին: Այս արժեքը պետք է կցվի customerName սյունակի արժեքներին
val appendString = "'\""
Այստեղ իմ հավելվածի տողը պարունակում է և մեկ(') մեջբերում և կրկնակի մեջբերում (") արժեքի մեջ, եթե ես փորձեմ կատարել ստորև կայծային հարցումը.
sqlContext.sql(s"SELECT append(`customerName`, $appendString) as `customerName APPEND` from df").show
Արդյունքը կլինի վերլուծական բացառություն
java.lang.RuntimeException. [1.68] ձախողում. սպասվում է նույնացուցիչ SELECT append(
customerName
, '") որպեսcustomerName APPEND
df ^-ից scala.sys.package$.error(package.scala:27) org.apache.spark.sql-ում: .catalyst.AbstractSparkSQLParser.parse(AbstractSparkSQLParser.scala:36)
Իմ ակնկալվող արդյունքն է
customerName APPEND
Օգտվող 1'"
Օգտվող 2'"
Իմ գտածոն տրված է ստորև.-
Եթե արժեքում առկա են միայն մեկ չակերտներ, ապա ես կարող եմ հաջողությամբ կատարել հարցումը, ինչպես ստորև.
val appendString = "'"
sqlContext.sql(s"""SELECT append(`customerName`, \"$appendString\") as `customerName APPEND` from df""").show
Եթե արժեքի մեջ կա միայն կրկնակի մեջբերում, ապա ես կարող եմ հաջողությամբ կատարել հարցումը, ինչպես ստորև.
val appendString = "\""
sqlContext.sql(s"""SELECT append(`customerName`, '$appendString') as `customerName APPEND` from df""").show
Բայց եթե նույն տողում առկա են միայնակ (') մեջբերում և կրկնակի մեջբերում ("), ես չկարողացա գտնել դա կատարելու հնարավոր եղանակ՝ օգտագործելով Spark Data Frame Select արտահայտությունը API-ն:
Իմ կայծային տարբերակը 1.6.0 է
Ցանկացած օգնություն մեծապես երախտապարտ կլինի: