Milyonlarca json ve python komut dosyalarının kullanımı için örnek-ayrıştırma kovanı

Örnek

Bir milyon json'u ayrıştırmak ve bunları alana göre tabloya eklemek için UDF'yi kullanın

1. UDF yazın

public class MovieJsonParser UDF'yi genişletir {public String eval (String json), IOException {ObjectMapper objectMapper = new ObjectMapper (); MovieBean movieBean = objectMapper.readValue (json, MovieBean.class); return movieBean.toString ();}}

Film fasulyesi nerede

public class MovieBean {private String movie; private String rate; private String timeStamp; private String uid; @Override public String toString () {return movie + "," + rate + "," + timeStamp + "," + uid;}}

2. Bir kavanoz paketine yazın ve onu kovanın sınıf yoluna ekleyin

addJAR / home / hadoop / moviejsonparser.jar

3. Bir işlev oluşturun

geçici işlev jsonparser as'com.kris.bigdata.hive.udf.MovieJsonParser 'oluşturun;

4. Bir json tablosu oluşturun ve verileri yükleyin

tablo t_movie_json (json dizesi) oluştur; veriyi yerel yolla yükle '/ home / hadoop / rating.json' tablonun üzerine yaz t_movie_json;

Tablodaki verilere bakın

5. Ayrıştırdıktan sonra eklenen bir tablo oluşturun

t_movie_rating tablosu (film dizesi, oran dizesi, unixtime dizesi, uid dizesi) ',' ile sonlandırılan satır biçimi sınırlandırılmış alanlar oluşturun;

6. Ayrıştırın ve yeni tabloya ekleyin

Daha önce json ayrıştırmak için oluşturduğumuz UDF işlevini kullanın, bir sabit biçim dizesi çıktılayın ve karşılık gelen değeri elde etmek için dizeyi kesin

t_movie_ratingselect split (moviejsonparser (json), ','), split (moviejsonparser (json), ','), split (moviejsonparser (json), ','), split (moviejsonparser (json), ',') t_movie_json'dan;

Ekledikten sonra verilerin nasıl göründüğüne bakın

Fanwai'de yerleşik json işlevi

Kovanda yerleşik bir json ayrıştırma işlevi vardır, ancak yalnızca tek katmanlı json nesnelerini ayrıştırabilir.Daha karmaşık json için, ayrıştırma için UDF yazmanız gerekir.

film olarak get_json_object (json, '$. movie'), t_movie_json limit 10'dan oran olarak get_json_object (json, '$. oran') seçin;

Uygulamayı dönüştürün

TRANSFORM anahtar sözcüğünü kullanarak, SQL'de kendi betiğimizi çağırabiliriz. Hive'ın sahip olmadığı ve UDF yazmak istemediğiniz fonksiyonlar için uygundur. Ardından, sorgulanan unixtime'ı görüntülemesi kolay bir hafta içi güne dönüştürmek için bir python betiği kullanıyoruz.

1. Önce bir python betiği yazın

vi weekday_mapper.py #! / bin / pythonimport sysimport datetime # sys.stdin'deki satır için her girdi satırını geçin: # Baştaki ve sondaki boşlukları kaldırın line = line.strip (); # Her satırı kesin ve her bir değeri alın movieid, rating , unixtime, userid = line.split ('\ t') # Unix zamanını hafta gününe çevir. Spesifik süreç, önce unixtime'ı float'a dönüştürmek, ardından float'ı datetime'a dönüştürmek ve ardından hafta içi hafta içi = datetime.datetime.fromtimestamp (float (unixtime)) elde etmek için datetime'ın isoweekday () yöntemini çağırmaktır. İsoweekday () #output data, use \ t baskı ile ayrılmış '\ t'.join ()

2. Dosyayı kovanın sınıf yoluna ekleyin

DOSYA /home/hadoop/weekday.py ekleyin;

3. Unixtime'ı dönüştürmek ve yeni bir tablo eklemek için komut dosyasını kullanın

T_movie_rating FROM'python weekday.py'AS (movieid, rate, weekday, uid) KULLANARAK TABLO u_data_new asSELECTTRANSFORM (movieid, rate, unixtime, uid) OLUŞTUR;

Son olarak, büyük veriyi öğrenmek istiyorsanız, sınırlı bir süre için ücretsiz materyaller ve kurslar almaktan bahsedeyim.

Nasıl alınır:

Hala eski kurallar

1. Yorum yazıları, kelime sınırı yoktur, tek kelime yeterlidir!

2. Xiaobian hayranı olun!

3. Özel Mesaj Editörü: "Büyük Veri Geliştirme Eğitimi"!

Hepinize teşekkür eder, iyi çalışmalar dilerim! (Öğreticiyi aldıktan sonra, sıkı çalışmalı ve daha fazla pratik yapmalısınız!)

Büyük Veriye Adım Atmak | Linux sistemiyle ilgili bir problemden sonra nasıl kurtarırsınız?
önceki
Hadoop, 3.x çağını başlattı: Eski büyük veri hegemonu, bulut bilişimin zorluklarına nasıl yanıt veriyor?
Sonraki
Windows sistemi ve Linux sistemindeki "büyük veri kuru malları" için jar paketi ve içe aktarma ifadesinin analizi
"Linux'u bilmiyorsam ne kadar korkunç" Gelişmiş teknoloji geliştirme: Bu temelde öğrenilmesi gereken bir beceridir
2020 büyük veri öğrenimi için olmazsa olmaz
Yıllık maaşı 500.000 olan büyük bir veri geliştirme mühendisi işe alamaz mısınız? İnanıyormusun?
Big Data Learning Route 2020 Sürümü
Hadoop dosya sıkıştırma savaşı (komut dosyaları ve kaynak kodu dahil)
Gerçeğin bıçağı
ToB Industry Investment Logic'ten Alıntı
YARI: Küresel silikon levha geliri geçen yıl% 2 düştü | Bir haftalık sektör verileri özeti
Büyük küresel yarı iletken şirketlerinin en son finansal raporlarının özeti
Tucao Chery'nin satışları ölüyor mu? Chery'nin gücü hakkında gerçekten hiçbir şey bilmiyorsun
"Maskeyi" arabaya değiştirin, Changan New Energy araç sahiplerinin rahat nefes almasını sağlar
To Top