2016-11-24 4 views
3

I haben eine Funktion in einem Scala Objekt, das die folgende SignaturPassing SqlContext als implizite Parameter in Funken

def f(v1:Int)(implicit sqlContext: SQLContext) 

wenn ich diese Funktion versuchen Anruf von funken Schale hat ich es

f(1) 
wie

nennen

und ich erwarte, dass der vorhandene sqlContext implizit an es übergeben wird, aber es nicht tut. Wie kann ich es funktionieren lassen, damit der sqlContext automatisch an diese Funktion übergeben wird?

-------------- ------------------- Update

Ich versuchte sqlContext.implicits zu importieren. _ in der Funkenschale vor meiner Funktion aufrufen, aber es half nicht

+0

Ich habe das gleiche Problem, hast du es am Ende herausgefunden? – Avision

Antwort

5

Sie brauchen nur einen SQLContext implizit auf den gleichen Kontext hinzufügen, die Sie Ihre Funktion aufrufen:

implicit val sqlContext = new SQLContext() // just an example 
// and then 
f(1) 

Wenn Sie mit apacha Spark, können Sie diesen Import verwenden:

import sqlContext.implicits._ 
+0

aber es tötet den ganzen Zweck. Ich versuche, es für den Benutzer unsichtbar zu machen, also rufe Benutzeraufruf meine Funktion auf, ohne den sqlContext als implizit zu definieren, andernfalls könnte ich sqlContext als normalen Parameter übergeben. –

+0

Ich versuche, das in der Spark-Shell zu importieren, aber es hilft nicht! –

+0

Der Benutzer muss den Kontext auf die eine oder andere Weise bereitstellen. Ich nahm an, dass du Spark benutzt, oder? –