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. |