AMcoder - javascript, python, java, html, php, sql

SPARK. Տվյալների շրջանակի ընտրված արտահայտությունը չկարողացավ կատարել գործողություն, եթե արժեքում առկա են և՛ մեկ մեջբերում, և՛ կրկնակի մեջբերում

Իմ սցենարը բացատրվում է ստորև.- (Ստորև փորձը փորձարկվել է 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 է

Ցանկացած օգնություն մեծապես երախտապարտ կլինի:


Պատասխանները:


1

Դուք կարող եք օգտագործել Տողերի միջակայքը` արժեքը տողից վերցնելու համար: . Բայց որպեսզի ձեր UDF-ն աշխատի, նախ պետք է փոխեք ձեր appendString արժեքը որպես

val appendString = """"'\"""""

Այն կպահի "'\"" արժեքը appendString փոփոխականում, որը դուք պետք է փոխանցեք ձեր UDF-ին: Ուշադրություն դարձրեք, որ դուք պետք է բաց թողնեք "-ը և '\"-ը փաթաթեք կրկնակի չակերտների շուրջ, որպեսզի այն դառնա վավեր String նիշ ձեր UDF-ի համար: Այժմ օգտագործեք հետևյալ հայտարարությունը ձեր արդյունքը ստանալու համար

sqlContext.sql(s"""SELECT  append(customerName, $appendString) as `customerName APPEND` from df""").show

//output
+-------------------+
|customerName APPEND|
+-------------------+
|            User1'"|
|            User2'"|
+-------------------+
26.02.2018
  • Շնորհակալություն: Դա խնայեց իմ ժամանակը :) 26.02.2018
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..