#membuat session, untuk mengakses semua fungsi spark dan DataFrame API
spark = SparkSession \
.builder \
.appName("Pengenalan DataFrame Spark") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()
+----------+-----+----------+----------------+------+----------+
| Tanggal| Jam| Kota| Item| Total|Pembayaran|
+----------+-----+----------+----------------+------+----------+
|2012-01-01|09:00| San Jose| Men's Clothing|214.05| Amex|
|2012-01-01|09:00|Fort Worth|Women's Clothing|153.57| Visa|
|2012-01-01|09:00| San Diego| Music| 66.08| Cash|
+----------+-----+----------+----------------+------+----------+
only showing top 3 rows
Pertama kita perlu mengimport module/package yang dibutuhkan, yaitu SparkSession dan semua
sql data type. Untuk mengakses semua fungsi Spark dan DataFrame API, kita harus membuat
SparkSession. Kemudian kita akan membuat skema untuk data kita. Skema ini mencakup susunan
kolom dari data kita, jenis data per kolomnya, dan apakah diperbolehkan jenis data null (kosong)
atau tidak. Kita mendefinisikan skema data menggunakan "StructType" seperti kode di atas. Adapun
"StructType" sudah kita import dari "from pyspark.sql.types import *", dimana "*" berarti import
semua yang tersedia, termasuk "StructType". Setelah itu kita dapat membaca data CSV kita ke
DataFrame Spark. Default pembacaan file CSV adalah melakukan pemisahan kolom dengan
pemisahnya adalah tanda koma ",". Dan karena data kita dipisahkan menggunakan "tab", maka kita
tambahkan parameter "sep="\t"", dan juga kita isi Header=True karena file kita memiliki header
kolom. Kemudian, kenapa kita harus menggunakan skema? Karena ini akan memudahkan untuk
proses selanjutnya. Dengan skema, kita dapat menentukan jenis data dari setiap kolom. Misalnya di
kolom "Total", kita isikan tipe data float, sehingga nanti kita dapat memfilter DataFrame ini, misalnya
hanya menampilkan nilai di atas batas nilai tertentu. Terakhir, kita tampilkan tiga baris DataFrame
dengan perintah ".show(3)".
Selanjutnya kita dapat menghitung jumlah baris data kita dengan perintah ".count()" seperti kode di
bawah ini. Kita juga dapat melihat skema kita dengan perintah "printSchema()". Untuk melihat
statistik dari DataFrame, kita dapat melakukannya dengan perintah ".describe()". Kita dapat
menentukan kolom mana yang ingin kita lihat, di bawah ini misanya kolom "Total".
In [29]: #menghitung baris dari DataFrame kita, dan menge-print untuk menampilkan
jumlahBaris = purchaseDataframe.count()
print("jumlah baris: ", jumlahBaris)
#melihat skema dari dataframe kita
purchaseDataframe.printSchema()
purchaseDataframe.describe('Total').show()
+-------+------------------+
|summary| Total|
+-------+------------------+
| count| 4138476|
| mean|249.96108549398548|
| stddev| 144.3174111542929|
| min| 0.0|
| max| 499.99|
+-------+------------------+
Kita dapat membuat DataFrame baru dari kolom data yang kita inginkan saja, yakni dengan
menggunakan perintah ".select(nama_DataFrame['nama_kolom'])", seperti kode di bawah ini.
purchaseDataframe['Total'])
kotaTotalDataframe.show(3); #menampilkan 3 baris DataFrame baru kita
kotaTotalDataframe.printSchema() #print skema dari DataFrame baru kita
+----------+------+
| Kota| Total|
+----------+------+
| San Jose|214.05|
|Fort Worth|153.57|
| San Diego| 66.08|
+----------+------+
only showing top 3 rows
root
|-- Kota: string (nullable = true)
|-- Total: float (nullable = true)
Kita dapat menambahkan konstanta nilai tertentu pada kolom yang kita inginkan, seperti kode di
bawah ini. Coba lihat nilai setelah kita munculkan tabelnya, maka semua nilai di kolom "Total" akan
ditambah dengan 10.
+----------+------------+
| Kota|(Total + 10)|
+----------+------------+
| San Jose| 224.05|
|Fort Worth| 163.57|
| San Diego| 76.08|
+----------+------------+
only showing top 3 rows
Kita dapat memfilter data berdasarkan syarat kondisional tertentu seperti kode di bawah ini. Kode di
bawah ini akan memembuat DataFrame baru dari baris data yang nilai di kolom "Total"nya lebih dari
200.
+----------+------+
| Kota| Total|
+----------+------+
| San Jose|214.05|
|Pittsburgh|493.51|
| Omaha|235.63|
+----------+------+
only showing top 3 rows
Untuk melakukan pengurutan/sorting data berdasarkan kolom tertentu, kita dapat melakukannya
+----------+-----+-----------+-----------------+------+----------+
| Tanggal| Jam| Kota| Item| Total|Pembayaran|
+----------+-----+-----------+-----------------+------+----------+
|2012-07-06|10:02|Albuquerque|Health and Beauty| 2.77| Cash|
|2012-07-06|10:15|Albuquerque| Pet Supplies|499.01| Visa|
|2012-07-06|10:03|Albuquerque| Toys| 50.47|MasterCard|
|2012-07-06|09:56|Albuquerque| Music|425.03| Cash|
+----------+-----+-----------+-----------------+------+----------+
only showing top 4 rows
Jika kita ingin mengetahui berapa jumlah transaksi di tiap kota, kita dapat menggunakan kode di
bawah ini. Pertama kita grupkan dahulu berdasarkan kolom "kota", kemudian kita hitung dengan
fungsi ".count()".
+---------------+-----+
| Kota|count|
+---------------+-----+
|North Las Vegas|40013|
| Phoenix|40333|
| Omaha|40209|
| Anchorage|39806|
| Anaheim|40086|
+---------------+-----+
only showing top 5 rows
purchaseTambahKolomIdDataframe = purchaseDataframe.withColumn(
"indeks", monotonically_increasing_id())
purchaseTambahKolomIdDataframe.show(4)
baris2Sampai4 = purchaseTambahKolomIdDataframe.filter((purchaseTambahKolom
IdDataframe['indeks']<=4) &
(purchaseTambahKolomIdD
ataframe['indeks']>=2))
baris2Sampai4.show()
+----------+-----+----------+----------------+------+----------+------
+
| Tanggal| Jam| Kota| Item| Total|Pembayaran|indeks|
+----------+-----+----------+----------------+------+----------+------
+
|2012-01-01|09:00| San Jose| Men's Clothing|214.05| Amex| 0|
|2012-01-01|09:00|Fort Worth|Women's Clothing|153.57| Visa| 1|
|2012-01-01|09:00| San Diego| Music| 66.08| Cash| 2|
|2012-01-01|09:00|Pittsburgh| Pet Supplies|493.51| Discover| 3|
+----------+-----+----------+----------------+------+----------+------
+
only showing top 4 rows
+----------+-----+----------+-------------------+------+----------+---
---+
| Tanggal| Jam| Kota| Item| Total|Pembayaran|indeks|
+----------+-----+----------+-------------------+------+----------+---
---+
|2012-01-01|09:00| San Diego| Music| 66.08| Cash| 2|
|2012-01-01|09:00|Pittsburgh| Pet Supplies|493.51| Discover| 3|
|2012-01-01|09:00| Omaha|Children's Clothing|235.63|MasterCard| 4|
+----------+-----+----------+-------------------+------+----------+---
---+
Kemudian jika ingin mengakses nilai berdasakan kolom, mudah saja, yakni dengan menggunakan
fungsi ".select()" seperti yang kita telah lakukan sebelumnya. Berikut contohnya.
+-----+
|Total|
+-----+
|66.08|
+-----+
import pyspark
#mengimport tipe data Row
from pyspark.sql import Row
#from pyspark.sql import SQLContext
from pyspark.sql import SparkSession
from pyspark.sql.types import *
#membuat session, untuk mengakses semua fungsi spark dan DataFrame API
#sc = SparkSession \
# .builder \
# .appName("Pengenalan DataFrame Spark") \
# .config("spark.some.config.option", "some-value") \
#.getOrCreate()
#sc = SparkContext.getOrCreate()
sc = SparkContext()
df = sc.parallelize([ \
Row(nama='Rony', umur=27, tinggi=168), \
Row(nama='Andy', umur=26, tinggi=165), \
Row(nama='Syeril', umur=27, tinggi=168)]).toDF()
df.show()
----------------------------------------------------------------------
-----
NameError Traceback (most recent call last)
<ipython-input-25-a0db256804fc> in <module>
17
18 #sc = SparkContext.getOrCreate()
---> 19 sc = SparkContext()
20 df = sc.parallelize([ \
21 Row(nama='Rony', umur=27, tinggi=168), \
#memilih hanya kolom Total dan Pembayaran dari sql view kita
TotalPembayaran = spark.sql("SELECT Total, Pembayaran FROM purchaseSql")
TotalPembayaran.show(3)
+------+----------+
| Total|Pembayaran|
+------+----------+
|214.05| Amex|
|153.57| Visa|
| 66.08| Cash|
+------+----------+
only showing top 3 rows
Kemudian kode di bawah ini adalah kode untuk mengurutkan/sorting DataFrame kita berdasarkan
kolom "Kota" dengan bahasa SQL.
+----------+-----+-----------+-------------------+------+----------+
| Tanggal| Jam| Kota| Item| Total|Pembayaran|
+----------+-----+-----------+-------------------+------+----------+
|2012-07-06|10:02|Albuquerque| Health and Beauty| 2.77| Cash|
|2012-07-06|10:18|Albuquerque| Crafts| 35.0| Discover|
|2012-07-06|10:03|Albuquerque| Toys| 50.47|MasterCard|
|2012-07-06|09:56|Albuquerque| Music|425.03| Cash|
|2012-07-06|10:04|Albuquerque|Children's Clothing|153.97| Amex|
+----------+-----+-----------+-------------------+------+----------+
only showing top 5 rows
Terakhir, kita akan mencoba memfilter baris data yang nilai di kolom "Total"nya lebih dari 200, dan
kita urutkan berdasarkan metode pembayaran (kolom "Pembayaran"). Berikut adalah kodenya.
In [40]: #filter nilai kolom Total>50 dan urutkan berdasarkan cara pembayaran
contohFilter = spark.sql("SELECT * FROM purchaseSql WHERE Total>200 ORDER
BY Pembayaran")
contohFilter.show(4)
+----------+-----+--------------+----------------+------+----------+
| Tanggal| Jam| Kota| Item| Total|Pembayaran|
+----------+-----+--------------+----------------+------+----------+
|2012-07-06|09:46| Long Beach| Pet Supplies|482.56| Amex|
|2012-07-06|09:47| Oakland| Computers| 338.9| Amex|
|2012-07-06|09:46|St. Petersburg|Women's Clothing|311.51| Amex|
|2012-07-06|09:45| Spokane| Men's Clothing|368.88| Amex|
+----------+-----+--------------+----------------+------+----------+
only showing top 4 rows
In [ ]: