文系エンジニアがAWS Certified Machine Learning – Specialty に合格してきました

ここ数年のAIブームで、AIの勉強全くしてこなかった私でも、少しずつ仕事でAI関係に関わることができてきました。その度に部分的に頑張って追いつくというのを続けてきたのですが、そろそろ限界を感じたので、どこかで体系的に勉強しなくてはと考えていまし…

プライベートなPyPIをpypiserverとDockerで簡単に作成する

イントラネット環境からのみアクセス可能なPyPI( The Python Package Index)を作りたい場合。 Dockerとpypiserverを利用すれば、簡単にプライベートなPyPIが作れます。 github.com プライベートのPyPIを構築 プライベートPyPIにパッケージを登録してみる プ…

静かな、静寂な、集中できる作業環境を求めて飽くなき追求 2019年版

私は仕事場でも家でも作業の大部分は、耳栓、イヤホン、ヘッドホンを装着しています。ただし、音楽には全く興味がありません。 イヤホンやヘッドホンで何を聴いているのかと言えば、基本は何も聴いていない「無音(ノイズキャンセリング)」、または波や風や雨…

Glue DynamicFrameでParquet変換におけるDecimalの扱い注意点

金額計算などで利用する固定小数点数 decimal をGlueで扱う場合の注意点を書きます。 GlueのGUIでそのまま設定すると、decimalにはなるのですが、 decimal(10,2) という型に固定されてしまうといった落とし穴もありますので、そのあたりも。 例として以下のC…

Redshift Spectrum 用の外部スキーマ上のテーブル定義を確認する

Redshfit SpectrumでDESCや \d 、SHOW CREATE TABLEなどで確認するクエリのメモ。 SELECT * FROM SVV_EXTERNAL_COLUMNS WHERE schemaname = '外部スキーマ名' AND tablename = 'テーブル名'; +-------------------------------+-------------+--------------…

Pythonスクリプト内からCuratorを使ってElasticsearchのIndexを操作する

Curatorは通常、YAML形式の定義ファイルを使ってコマンドラインから操作することが多いと思いますが、PythonからAPIを経由で操作することも可能です。 基本的な操作のざっくりコードですが例を書きます。 準備 Elasticsearchクライアントの生成 CuratorのImp…

PandasのDataFrameを使ってElasticsearchにデータを投入

PandasのDataFrameをそのままElasticsearchに入れた方法書きます。 元データ準備 データの前処理 Elasticsearchへの接続確認 Elasticsearchへインデックスのスキーマテンプレートの定義 Elasticsearchにデータ投入 確認 参考URL 元データ準備 CSVのデータな…

Glueで変更のあったパーティション配下だけS3を部分更新したい

やりたいこと 準備 テストデータ生成 S3にアップロード ETLジョブ 部分更新のケースを試してみる 課題① ジョブブックマーク有効化時の再実行 課題① の対策 課題 ② DynamicFrameはAppendしかできない 課題②への対策 課題②への対策1 直接パーティションだけを…

PySparkでOpen Distro for Elasticsearchにデータを投入

タイトルの件、作業メモ。 AWSが出してきたOpen Distro for ElasticsearchにPySpark使ってデータを投入する部分を下調べしたので残しておきます。 利用するデータ Open Distro for Elasticsearchの起動 PySpark準備 ElasticSearchに投入 参考URL Open Distro…

Windowsのinode的情報BY_HANDLE_FILE_INFORMATIONを取得するPowerShellスクリプト

Windowsでもinode的なところを調べたかったのですが調べてみると、 stackoverflow.com Open both files with CreateFile, call GetFileInformationByHandle for both, and compare dwVolumeSerialNumber, nFileIndexLow, nFileIndexHigh. If all three are e…

EC2のWindows上にpyspark+JupyterでS3上のデータ扱うための開発環境を作る

EC2(Windows)にpyspark構築してS3の情報取得するところまでやる機会があったので情報残しておきます。 環境変数設定 各種ランタイムインストール Javaのインストール Python3.7.2インストール Spark インストール Sparkダウンロード 7zipでgzipを解凍 hadoop…

WindowsにFluentdをインストールしてS3にデータ転送して、管理用の設定も追加

WindowsにFluentdを入れる機会があったのでまとめておきます。 td-agent(Fluentd)インストール td-agentダウンロード td-agentインストール プラグインのインストール ディレクトリ 設定例 設定ファイルの退避 設定ファイル Append用 Update用 Monitor用 AWS…

LambdaのLayer機能活用してpandas,pyarrow,s3fs使ってParquet変換する簡易ETL処理を実装する

AWS

小さなファイルのETLにGlueを使うのがもったいなかったので、Pandasやpyarrowで実装しました。 Lambda Layerにpandasとpyarrowを追加 Layerに登録するパッケージを作成 パッケージをアップロード Lambdaのコード 参考 Lambda Layerにpandasとpyarrowを追加 L…

EC2からAthenaへのJDBC接続テストするためのDockerイメージ作った

色々な環境でIAM権限等のテストしている作業の中で、タイトルのイメージ作成したので書いておきます。 パラメータ環境変数 必須環境変数 環境変数名 説明 REGION AWS Region SQL Athenaで実行されるSQL OUTPUT_LOCATION Athenaの実行結果が格納されるS3バケ…

Athenaを使ってS3上のJSONを変換・パーティショニングしてParquet出力してみる

S3上のJSONデータをAthenaを利用してParquetに変換してみます。 使うのはこの話です。 aws.amazon.com テストデータ生成 日付列をパーティションに利用 Parquet+パーティション分割して出力 カタログへパーティション追加 所感 参考URL テストデータ生成 こ…

Windowsで複数のChromeシークレットウィンドウを開き複数の認証情報ブラウザを同時に使う

複数の認証情報で開いたブラウザを並べながらテストをしているときなどは、複数のシークレットウィンドウが欲しくなります。 AWSのクロスアカウントの検証とか。 シークレットモードのウィンドウが使うワークスペースを準備します。シークレットウィンドウ分…

中級者向けSQL入門「達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ」を読みました

この本を読みました。 達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ (CodeZine BOOKS)作者: ミック出版社/メーカー: 翔泳社発売日: 2018/10/11メディア: 単行本(ソフトカバー)この商品を含むブログを見る 目次 1部 魔法のSQL 2部 リレー…

Apache DrillでAWSのDBRレポートCSVファイルをParquet変換して分析してみる

DBR(Detailed Billing Report with Resources and Tags)のCSVを分析しようとググってみたら以下のリポジトリ見つけました。 github.com 中身ざっと読んでみると以下のような感じに見えます。 ローカルにDBRダウンロード DBRのCSVをParquetに変換(Python+Apa…

RedshiftとSpectrumとS3とVPCで組み合わせた場合のネットワーク経路が複雑だったので整理してみた

VPC絡みでRedshiftのネットワークが複雑でハマって整理したので、そのまとめです。 あくまで2019/02/09現在の仕様なので、仕様変わっていることもあると思います。 全体図 2019/02/20追記 Redshift SpectrumからS3への接続はVPC外を通る ParquetのCOPYはJSON…

DockerでApache Drillをサクッと試してみる(S3上のParquetファイル読んでみた)

Apache Drillですが、簡単にインストールして使うことできます。 こちらに書かれているようにダウンロードして解凍するだけです。 Installing Drill on Linux and Mac OS X - Apache Drill ただDocker使える環境あればもっと簡単に試すことできます。 公式コ…

EMR上のApache AtlasにAWS Glueのデータカタログ情報をインポートしてみた

Hiveのメタデータ管理ができるApache Atlasですが、こちらのブログを参考にGlueのカタログ情報もインポートしてみました。 aws.amazon.com EMRのHiveメタストアとしてGlueを使うための設定を準備 EMRクラスタの起動 EMRクラスタへ接続 Glue接続確認 AtlasへH…

AWS Athenaのユーザごとのクエリ実行履歴を分析するためのデータをAWS CLIで収集

Athenaのクエリの実行履歴を、実行ユーザと紐付ける方法です。 CloudTrailからAthenaの実行イベントを取得 こちらのコマンドを利用します。 lookup-events — AWS CLI 1.16.96 Command Reference EventSource=athena.amazonaws.com EventName=StartQueryExecu…

Glueの開発環境をVPC内に閉じるためSageMaker止めてEC2で構築してみた

Glueの開発にSageMaker使っていたのですが、いくつか自分の使い方では問題があったので自分で立ててみたら簡単でした。 SageMakerはネットワークが特徴的 構成 JupyterとSparkMagicインストール ① Anacondaインストール ② (Anaconda Prompt) widgetsnbextens…

電話ボックスみたいなワークスペースのTELECUBE(テレキューブ)利用してみました

テレキューブって知ってますか? こんな感じで電話ボックスみたいなのですが、中には椅子とテーブルがあって集中して仕事ができる空間になっています。 こちらが実証実験中で無料で使えたので入ってきました。 telecube.jp 使い方 使い方に関しては、こちら…

GlueのDynamicFrameでS3へファイル書き出す時はCSVやJSONよりParquetが早い

DynamicFrameを使った開発をしていたら、大した処理していないのに、想像以上に時間がかかるなと思って調べていたら、JSONの書き出しが時間かかっていました。 タイトルの通り、JSONやCSVでのS3出力と比較してParquetでの出力は凄い早いというお話です。処理…

Glueで色々な日付フォーマットの文字列をtimestamp型に変換してみた

掲題の件、JSON等にある日付フォーマットの文字列から、Timestamp形式に変換したかったのですが、どの書式だと変換できるのか良くわかってなかったので、実際に実行してみました。 初期化 日付文字列 Glueでマッピング 結果 UnixTimeの変換 Glue Spark 初期…

AthenaでHIVE_PARTITION_SCHEMA_MISMATCHが発生 GlueカタログのTableとPartitionの間のスキーマに不整合直して解消

掲題のエラーに当たってサポートに対応教えてもらったのでメモ。 事象 原因 パーティションの例 テーブルのスキーマ パーティション毎のスキーマ 対応 参考 事象 CSVをGlueを使ってパーティション分割して、AthenaでプレビューしてみたらHIVE_PARTITION_SCHE…

LEGOとRaspberry Piで会社のイベント展示用のデモ作った話

この動画のデモを作った話です。題名にLEGOと入れましたが、自分はLEGOは触っていなくて、Raspberry Pi専任で作っていたこともあり、少し、技術的なことを中心に書いていこうと思います。 youtu.be www.beex-inc.com 何で作ったのか? どうやって動いている…

Lake Fomationの前身?AWS Data Lake Solutionを触ってみました

先月のre:Invent 2018で発表になったLake Formation。現地で聞いていて即効プレビュー申し込んであるのですが まだ使えていません。 そんな時に一緒に仕事をしている方から、こんなモノがあることを聞きました。 aws.amazon.com こちらから引用したアーキテ…

Livy+SparkmagicでWSL上のSparkをWindows側のJupyter notebookから使う

やりたいこと 利用リポジトリ Apache Livy Sparkmagic WSLでSparkをダウンロード WSLでLivyインストール&ビルド Sparkmagic 他のSparkのバージョン 参考URL やりたいこと Windows上に入れたSparkとJupyter Nootbookで開発していたら、Windowsのディレクトリ…