2016-07-11 16 views
2

Ich versuche, Daten von Apache Phoenix in einen Spark DataFrame zu laden.Ich kann keine Spark Phoenix DataFrames erstellen

ich in der Lage gewesen, um erfolgreich eine RDD mit dem folgenden Code zu erstellen:

val sc = new SparkContext("local", "phoenix-test") 
val sqlContext = new org.apache.spark.sql.SQLContext(sc) 

val foo: RDD[Map[String, AnyRef]] = sc.phoenixTableAsRDD(
    table = "FOO", 
    columns = Seq("ID", "MESSAGE_EPOCH", "MESSAGE_VALUE"), 
    zkUrl = Some("<zk-ip-address>:2181:/hbase-unsecure")) 

foo.collect().foreach(x => println(x)) 

aber ich habe nicht so viel Glück versuchen, einen Datenrahmen zu schaffen. Mein aktueller Versuch ist:

val sc = new SparkContext("local", "phoenix-test") 
val sqlContext = new SQLContext(sc) 

val df = sqlContext.phoenixTableAsDataFrame(
    table = "FOO", 
    columns = Seq("ID", "MESSAGE_EPOCH", "MESSAGE_VALUE"), 
    zkUrl = Some("<zk-ip-address>:2181:/hbase-unsecure")) 

df.select(df("ID")).show 

Leider ist die oben genannte Code führt zu einer Classcast:

java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericMutableRow cannot be cast to org.apache.spark.sql.Row 

Ich bin noch sehr neu zu entfachen. Wenn jemand helfen kann, würde es sehr geschätzt werden!

Antwort

2

Obwohl Sie nicht Ihre Funken Version und Details der Ausnahme ...

Bitte sehen PHOENIX-2287 which is fixed, die sagt

erwähnt

Umwelt: im Standalone-Modus HBase 1.1.1 läuft auf OS X *

Funken 1.5.0 Phoenix 4.5.2

Josh Mahonin hat einen Kommentar - 23/Sep/15 17.56 Aktualisiert Patch Unterstützung für Spark 1.5.0, und ist abwärtskompatibel wieder auf 1.3.0 (manuell getestet, Spark-Version Profile werden ergänzt kann sehenswert in der Zukunft) In 1.5.0 haben sie die GenericMutableRow Datenstruktur weg und explizit versteckt. Glücklicherweise sind wir in der Lage, extern zugewandten '' Datentyp, der abwärtskompatibel ist, und sollte auch in zukünftigen Versionen kompatibel bleiben. Als Teil des Updates hat Spark SQL einen Konstruktor auf ihrem 'DecimalType' veraltet. Bei der Aktualisierung dieser, habe ich ein neues Problem, das ist, dass wir nicht tragen Sie die Genauigkeit und Skalierung des zugrunde liegenden Dezimal-Typ durch Spark. Für jetzt habe ich festgelegt, dass es die Spark-Standardwerte verwenden soll, aber Ich werde speziell dafür ein anderes Problem erstellen. Ich habe einen ignorierten Integrationstest in diesem Patch auch eingeschlossen.

+0

Sie sind in Ordnung mit meiner Antwort, bitte. vote-up, "accepted-by-owner", das anderen Benutzern als Zeiger hilft –

Verwandte Themen