не удалось подключить apache-zeppelin к ошибке highcharts: значение seriesCol не является членом org.apache.spark.sql.DataFrame

я пытаюсь связать цеппелин с хайчартами..

%spark 
import com.knockdata.zeppelin.highcharts._ 
import com.knockdata.zeppelin.highcharts.model._ 
import sqlContext.implicits._

val Tokyo = Seq(7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3,
18.3, 13.9, 9.6).map(("Tokyo", _))

val df = (Tokyo).toDF("city", "temperature")

df.show()

highcharts(df.seriesCol("city").series("y" -> col("temperature"))).plot()

который дает

import com.knockdata.zeppelin.highcharts._
import com.knockdata.zeppelin.highcharts.model._
import sqlContext.implicits._
Tokyo: Seq[(String, Double)] = List((Tokyo,7.0), (Tokyo,6.9), (Tokyo,9.5), (Tokyo,14.5), (Tokyo,18.2), (Tokyo,21.5), (Tokyo,25.2), (Tokyo,26.5), (Tokyo,23.3), (Tokyo,18.3), (Tokyo,13.9), (Tokyo,9.6))
df: org.apache.spark.sql.DataFrame = [city: string, temperature: double]
+-----+-----------+
| city|temperature|
+-----+-----------+
|Tokyo|        7.0|
|Tokyo|        6.9|
|Tokyo|        9.5|
|Tokyo|       14.5|
|Tokyo|       18.2|
|Tokyo|       21.5|
|Tokyo|       25.2|
|Tokyo|       26.5|
|Tokyo|       23.3|
|Tokyo|       18.3|
|Tokyo|       13.9|
|Tokyo|        9.6|
+-----+-----------+
<console>:201: error: value seriesCol is not a member of org.apache.spark.sql.DataFrame
              highcharts(df.seriesCol("city").series("y" -> col("temperature"))).plot()

я добавил артефакт зависимостей в интерпретатор искры как com.knockdata:zeppelin-highcharts:0.2

последовали https://github.com/knockdata/zeppelin-highcharts/blob/master/docs/DemoLineChart.md и попробовал данные банка, используя Есть ли лучший интерфейс для добавления поддержки Highcharts в Zeppelin, но получение

<console>:224: error: value series is not a member of org.apache.spark.rdd.RDD[Bank]
possible cause: maybe a semicolon is missing before `value series'?
                .series("x" -> "age", "y" -> avg(col("income")))

пожалуйста, помогите мне, где я ошибаюсь? В чем может быть проблема? заранее спасибо


person Priyanka D L    schedule 22.08.2016    source источник


Ответы (2)


я изменил артефакт зависимостей в интерпретаторе искры com.knockdata:zeppelin-highcharts:0.2 на com.knockdata:zeppelin-highcharts:0.6.0, чтобы решить проблему ... но проблема с банковскими данными все еще существует ... любая помощь в этом?

%spark
import com.knockdata.zeppelin.highcharts._
import com.knockdata.zeppelin.highcharts.model._
import sqlContext.implicits._

val bankText = sc.textFile("/home/priyanka/Downloads/bank-data.csv")

case class Bank(age:Integer, region:String, income : Float, married : String, children : Integer, car:String, save_act:String, current_act : String, mortgage : String, pep : String)

// split each line, filter out header (starts with "age"), and map it into Bank case class  
val bank = bankText.map(s=>s.split(",")).filter(s=>s(0)!="age").map(
    s=>Bank(s(0).toInt, 
            s(1).replaceAll("\"", ""),
            s(2).replaceAll("\"", "").toFloat,
            s(3).replaceAll("\"", ""),
            s(4).replaceAll("\"", "").toInt,
            s(5).replaceAll("\"", ""),
            s(6).replaceAll("\"", ""),
            s(7).replaceAll("\"", ""),      
            s(8).replaceAll("\"", ""),
            s(9).replaceAll("\"", "")
        )
)

// convert to DataFrame and create temporal table
bank.toDF().registerTempTable("bank")

highcharts(bank.series("x" -> "age", "y" -> avg(col("income"))).orderBy(col("age"))).plot()

который дает

import com.knockdata.zeppelin.highcharts._
import com.knockdata.zeppelin.highcharts.model._
import sqlContext.implicits._
bankText: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[49] at textFile at <console>:62
defined class Bank
bank: org.apache.spark.rdd.RDD[Bank] = MapPartitionsRDD[52] at map at <console>:66
<console>:70: error: value series is not a member of org.apache.spark.rdd.RDD[Bank]
possible cause: maybe a semicolon is missing before `value series'?
                .series("x" -> "age", "y" -> avg(col("income")))
                 ^

благодарю вас

person Priyanka D L    schedule 23.08.2016
comment
Большое спасибо за использование. Я автор. Это было связано с проблемой версии. Используйте zeppelin-highcart:0.6.0 на zeppelin 0.6. (В предыдущем документе было сказано zeppelin-highcharts:0.6.0-SNAPSHOT, интерфейс был изменен. Я исправил документ) - person Rockie Yang; 23.08.2016
comment
большое спасибо .. спасибо за то, что предоставили это :) .. есть идеи, что происходит с чтением из файла? данные банка? некоторые конфликты между org.apache.spark.rdd.RDD и org.apache.spark.sql.DataFrame? - person Priyanka D L; 23.08.2016
comment
банк должен быть DataFrame. Переместите toDF() в конец определения банка - person Rockie Yang; 23.08.2016

DataFrame можно неявно преобразовать в SeriesHolder, у которого есть функция seriesCol. Он был добавлен в версии 0.6.0.

df.seriesCol("city") 

Ошибка должна быть связана с использованием неправильной версии spark-highcharts. Образец кода (doc) соответствует версии 0.6.0 (сопоставляется непосредственно с версией zeppelin).

Использование докера может быть самым простым способом. Или используйте аналогичный способ, например Dockerfile.

docker run -p 8080:8080 -d knockdata/zeppelin-highcharts
person Rockie Yang    schedule 22.08.2016
comment
я использую только zeppelin 0.6.0. они сказали If you wanna run on your existing zeppelin, follow Use In Zeppelin., мне нужно снова использовать докер? а почему банковские данные не работают? - person Priyanka D L; 23.08.2016