5

Spark SQL, Scala'da bir Spark DataFrame için pencere kaydırma işlevine bakıyorum.kıvılcım sql pencere fonksiyonu gecikmesi

Sütun Col1, Col1, Col1, date ile bir veri çerçevem ​​var.

Col1 Col2 Col3 date  volume new_col 
         201601 100.5 
         201602 120.6 100.5 
         201603 450.2 120.6 
         201604 200.7 450.2 
         201605 121.4 200.7` 

Şimdi yukarıda gösterildiği gibi bir satır aşağı slided isme (new_col) ile yeni bir sütun eklemek istiyorum.

Pencere işlevini kullanmak için aşağıdaki seçeneği denedim.

val windSldBrdrxNrx_df = df.withColumn("Prev_brand_rx", lag("Prev_brand_rx",1)) 

Nasıl yapılacağı konusunda bana yardımcı olabilecek herhangi biri olabilir. Doğru tüm cevapsız yapıyoruz

+0

@Ramesh Spark 2.0 kadar, kullanıcılar pencere fonksiyonlarını uygulamak için 'SQLContext' yerine' HiveContext' kullanmak zorunda kaldı. "HiveContext", "SparkContext" örneğini geçirerek "SQLContext" ile aynı şekilde oluşturulur. Doğru olarak hatırlarsam, Spark dağıtımınız için uygun bir sürümle birlikte 'org.apache.spark: spark-hive_2.10' eklemeniz gerekir. –

+0

@msrinivas, Cevabınız doğru çıktı. – Ramesh

cevap

9

Bu kod Kıvılcım kabuk üzerinde çalıştırıldı lag

val df = sc.parallelize(Seq((201601, 100.5), 
    (201602, 120.6), 
    (201603, 450.2), 
    (201604, 200.7), 
    (201605, 121.4))).toDF("date", "volume") 

val w = org.apache.spark.sql.expressions.Window.orderBy("date") 

import org.apache.spark.sql.functions.lag 

val leadDf = df.withColumn("new_col", lag("volume", 1, 0).over(w)) 

leadDf.show() 

+------+------+-------+ 
| date|volume|new_col| 
+------+------+-------+ 
|201601| 100.5| 0.0| 
|201602| 120.6| 100.5| 
|201603| 450.2| 120.6| 
|201604| 200.7| 450.2| 
|201605| 121.4| 200.7| 
+------+------+-------+ 

üzerinde over(window expression) olan 2.0.2

Sen lag sorununu çözecek olan iki paket aşağıda alabilirsiniz
+0

Makinemde 1.5.2 (kıvılcım kovanı) yüklemek için 1.5.2 kurulum ve maven ile karşılaşma sorunum yok. – mrsrinivas

+0

Şimdi kovan bağlamını oluşturabiliyorum. Ama yine de aynı hatayı alıyorum. – Ramesh

+0

Veritabanını sqlcontext kullanılarak oluşturulduğunu düşünüyorum, hala pencere işlevini kullanamıyorum. – Ramesh

1

bağımlılıklar.

import org.apache.spark.sql.functions.{lead, lag} 
import org.apache.spark.sql.expressions.Window