Apache Spark (CADDデータ読み込み)
少し間があいてしまいましたが、今回はCADDのデータをApache Sparkに読み込んでみました。CADDのデータそのものはタブ区切りのcsvファイルですので、spark.read.csv()で読み込んでいくことができます。 今回からnotebook部分を以下のように表示するようにしました。横道ですがipynbファイルをnbconvertでhtmlへ変換していくことでnotebookをきれいに共有することができます。
In [1]:
データの下準備¶
予め以下のデータをダウンロードしておいてあります。 annotationがincludeされるかどうかでサイズにかなりの開きがあります。 bgzファイルはApache Sparkで高速に並列アクセスをするために事前につくっておきました。 sed '1d'はheaderを整えるために付与しています。- 変更前
- 変更後
(今回はオンプレミスに構築してあるテストマシンにて実行。s3はminioで、sparkはyarnで動作させています。)
起動¶
あらかじめ設定しておいたAWSの"Service Catalog"からパラメータを入力し、欲しいサイズのSpark Clusterを起動していきます。主要なオプションは以下のとおりです。
オプション |
役割等 |
---|---|
--packages |
packages以下にコンマ区切りで依存関係にあるパッケージを指定しています。 |
io.projectglow:glow-spark3_2.12:1.1.2, io.delta:delta-core_2.12:1.0.1, |
この2行はdeltaを使うために必要です。 |
org.apache.hadoop:hadoop-aws:3.2.0, |
s3へアクセスするために必要なものです。 |
--conf spark.serializer=org.apache.spark.serializer.KryoSerializer |
serializeにつかうclassを指定。推奨値です。 |
In [2]:
Out[2]:
データの読み込み¶
今回はgnomad.genomes.r3.0.indel_inclAnno.tsv.bgzを読み込んでみます。初めて読み込むデータでもあるため、まずはinferSchema=Trueで読み込んでみます。
In [3]:
In [4]:
In [5]:
いくつかの項目を選択し表示させてみます
In [6]:
データの中身を確認してみます。
df.na.drop()はデータに欠損値があるものをdropするものですが、このデータにおいては何かしらの列でNAがあるようで、何も残りませんでした。
以下いくつかのセルを実行することでどのように欠損値を含んだデータであるかが確認できますが、表示の都合で出力を削除してあります。
df.na.drop()はデータに欠損値があるものをdropするものですが、このデータにおいては何かしらの列でNAがあるようで、何も残りませんでした。
以下いくつかのセルを実行することでどのように欠損値を含んだデータであるかが確認できますが、表示の都合で出力を削除してあります。
In [7]:
SIFTcatはすべてNAのようです。
In [8]:
それぞれのカラムでNAであるデータがいくつあるかをカウントしてみます。
In [9]:
In [10]:
反対に、NullやNaではなく値が入っている数を数えてみます。
SIFTcat以外にもいくつかのカラムはそもそもデータが入っていないことがわかりました。
SIFTcat以外にもいくつかのカラムはそもそもデータが入っていないことがわかりました。
In [11]:
inferSchemaで取得されたSchemaを見てみます 正確なところはやはり↓のような公式ドキュメントを見て決定していく必要がありそうです。
https://cadd.gs.washington.edu/static/ReleaseNotes_CADD_v1.4.pdf
https://cadd.gs.washington.edu/static/ReleaseNotes_CADD_v1.4.pdf
In [12]:
In [13]:
s3から読み込む場合は、このようにします。
In [14]:
DataFrame操作¶
ここではRawScoreでsortしています。In [15]:
スコアの高い順番にsortする場合は次のようにdesc()で項目名を囲みます。
In [16]:
今回はテスト用の小さなVMを6ノード使って作成したSpark Clusterを使用しました。csvファイルなので簡単に読み込めますが、実際にはもっと丁寧にSchemaの定義をする必要はあります。deltaへの書き込みが7分13秒と少々かかっていますが、これはテストマシンの構成によるもので、Cloudや実際に使用するオンプレミスの機材ではもっと高速になります。