Spark SQL - Veri Çerçeveleri

Bir DataFrame, adlandırılmış sütunlar halinde düzenlenen dağıtılmış bir veri koleksiyonudur. Kavramsal olarak, iyi optimizasyon tekniklerine sahip ilişkisel tablolara eşdeğerdir.

Bir DataFrame, Hive tabloları, Yapılandırılmış Veri dosyaları, harici veritabanları veya mevcut RDD'ler gibi bir dizi farklı kaynaktan oluşturulabilir. Bu API, modern Büyük Veri ve veri bilimi uygulamaları için tasarlanmıştır.DataFrame in R Programming ve Pandas in Python.

DataFrame'in Özellikleri

İşte DataFrame'in birkaç karakteristik özelliği:

  • Tek bir düğüm kümesinde büyük kümeye kadar Kilobayt'tan Petabayt'a kadar olan verileri işleyebilme.

  • Farklı veri formatlarını (Avro, csv, elastik arama ve Cassandra) ve depolama sistemlerini (HDFS, HIVE tabloları, mysql, vb.) Destekler.

  • Spark SQL Catalyst optimizer (ağaç dönüştürme çerçevesi) aracılığıyla son teknoloji optimizasyon ve kod üretimi.

  • Spark-Core aracılığıyla tüm Büyük Veri araçları ve çerçeveleriyle kolayca entegre edilebilir.

  • Python, Java, Scala ve R Programlama için API sağlar.

SQLContext

SQLContext bir sınıftır ve Spark SQL'in işlevlerini başlatmak için kullanılır. SparkContext sınıfı nesnesi (sc), SQLContext sınıfı nesnesini başlatmak için gereklidir.

Aşağıdaki komut, SparkContext'i spark-shell aracılığıyla başlatmak için kullanılır.

$ spark-shell

Varsayılan olarak, SparkContext nesnesi şu adla başlatılır: sc kıvılcım kabuğu başladığında.

SQLContext oluşturmak için aşağıdaki komutu kullanın.

scala> val sqlcontext = new org.apache.spark.sql.SQLContext(sc)

Misal

Adlı bir JSON dosyasındaki çalışan kayıtlarının bir örneğini ele alalım. employee.json. DataFrame (df) oluşturmak ve adlı JSON belgesini okumak için aşağıdaki komutları kullanınemployee.json aşağıdaki içeriğe sahip.

employee.json - Bu dosyayı geçerli dosyanın bulunduğu dizine yerleştirin. scala> işaretçi bulunur.

{
   {"id" : "1201", "name" : "satish", "age" : "25"}
   {"id" : "1202", "name" : "krishna", "age" : "28"}
   {"id" : "1203", "name" : "amith", "age" : "39"}
   {"id" : "1204", "name" : "javed", "age" : "23"}
   {"id" : "1205", "name" : "prudvi", "age" : "23"}
}

DataFrame İşlemleri

DataFrame, yapılandırılmış veri işleme için alana özgü bir dil sağlar. Burada, DataFrames kullanarak yapılandırılmış veri işlemenin bazı temel örneklerini ekliyoruz.

DataFrame işlemlerini gerçekleştirmek için aşağıda verilen adımları izleyin -

JSON Belgesini okuyun

Öncelikle JSON belgesini okumalıyız. Buna dayanarak, (dfs) adında bir DataFrame oluşturun.

Adlı JSON belgesini okumak için aşağıdaki komutu kullanın employee.json. Veriler, kimlik, ad ve yaş gibi alanları içeren bir tablo olarak gösterilir.

scala> val dfs = sqlContext.read.json("employee.json")

Output - Alan adları otomatik olarak employee.json.

dfs: org.apache.spark.sql.DataFrame = [age: string, id: string, name: string]

Verileri Göster

DataFrame'deki verileri görmek istiyorsanız, aşağıdaki komutu kullanın.

scala> dfs.show()

Output - Çalışan verilerini tablo formatında görebilirsiniz.

<console>:22, took 0.052610 s
+----+------+--------+
|age | id   |  name  |
+----+------+--------+
| 25 | 1201 | satish |
| 28 | 1202 | krishna|
| 39 | 1203 | amith  |
| 23 | 1204 | javed  |
| 23 | 1205 | prudvi |
+----+------+--------+

PrintSchema Yöntemini Kullanın

DataFrame'in Yapısını (Şema) görmek istiyorsanız, aşağıdaki komutu kullanın.

scala> dfs.printSchema()

Output

root
   |-- age: string (nullable = true)
   |-- id: string (nullable = true)
   |-- name: string (nullable = true)

Seçme Yöntemini Kullan

Getirmek için aşağıdaki komutu kullanın nameDataFrame'den üç sütun arasındaki sütun.

scala> dfs.select("name").show()

Output - değerlerini görebilirsiniz. name sütun.

<console>:22, took 0.044023 s
+--------+
|  name  |
+--------+
| satish |
| krishna|
| amith  |
| javed  |
| prudvi |
+--------+

Yaş Filtresini Kullan

Yaşı 23'ten büyük (yaş> 23) çalışanları bulmak için aşağıdaki komutu kullanın.

scala> dfs.filter(dfs("age") > 23).show()

Output

<console>:22, took 0.078670 s
+----+------+--------+
|age | id   | name   |
+----+------+--------+
| 25 | 1201 | satish |
| 28 | 1202 | krishna|
| 39 | 1203 | amith  |
+----+------+--------+

GroupBy Yöntemini Kullan

Aynı yaştaki çalışanların sayısını saymak için aşağıdaki komutu kullanın.

scala> dfs.groupBy("age").count().show()

Output - iki çalışan 23 yaşında.

<console>:22, took 5.196091 s
+----+-----+
|age |count|
+----+-----+
| 23 |  2  |
| 25 |  1  |
| 28 |  1  |
| 39 |  1  |
+----+-----+

SQL Sorgularını Programlı Olarak Çalıştırma

Bir SQLContext, uygulamaların SQL işlevlerini çalıştırırken programlı olarak SQL sorgularını çalıştırmasını sağlar ve sonucu bir DataFrame olarak döndürür.

Genel olarak, SparkSQL arka planda mevcut RDD'leri DataFrame'lere dönüştürmek için iki farklı yöntemi destekler -

Sr. Hayır Yöntemler ve Açıklama
1 Şemayı Yansıma Kullanarak Çıkarma

Bu yöntem, belirli nesne türlerini içeren bir RDD'nin şemasını oluşturmak için yansıma kullanır.

2 Şemayı Programlı Olarak Belirtme

DataFrame oluşturmanın ikinci yöntemi, bir şema oluşturmanıza ve ardından bunu mevcut bir RDD'ye uygulamanıza olanak tanıyan programlı arabirimdir.