山pの楽しいお勉強生活

勉強の成果を垂れ流していきます

ユーザ認証でGoogleドライブ上のファイルをPythonで操作する

はじめに コードはドキュメント通りだが、認証に1日かかったためメモ 本記事ではユーザ認証を使用する バッチ処理などで使用するためにはサービスアカウントを使用する キャプチャはないが、参考リンクは大目に貼っているので、解決しない場合でもリンクは見…

npm install と npm ci をどのように使い分けるか

※タイトルの npm install は引数なしを想定しています。 一言 引数なしの npm install は使わない 環境構築時には npm ci を使用する 詳細 npm install 引数なしの場合、package.json に沿った形で依存ライブラリをインストールする package-lock.jsonは見な…

PySparkでDataFrame.cacheはMEMORY_AND_DISKレベルキャッシュされる

概要 タイトルが全て MEMORY_ONLYだと勘違いしていたためメモ persistも引数なしで呼び出すとMEMORY_AND_DISKなので同じ https://spark.apache.org/docs/3.2.0/api/python/reference/api/pyspark.sql.DataFrame.cache.html https://spark.apache.org/docs/3.…

Xiaomi Pad 5(MIUI12)を複数アカウント(ユーザー)で使用する

はじめに Xiaomi Pad5を購入したものの、デフォルトでは複数ユーザーで使用ができない? 端末というより、OSであるMIUIの仕様? とりあえず複数ユーザーで使用できるようになったので手順をメモする ただし、色々制限はかかっているの注意。詳細は下記参照 …

GitHub ActionsでビルドしたドキュメントをGitHub Pagesで表示する

まとめ GitHub Pagesは「GitHub Enterprise Cloud 」プランの場合privateで使用する事ができる 企業でお金払っていてオンプレのGitHubでなければこのプランのはず 追記: 有料プランでもTeamプランというのがありました。こちらではアクセス制御はできません …

PySparkではDataFrameのjoinでorderは維持されない

概要 PySparkのDataFrameではjoinした際にorderは維持されない 正確にはshuffleが行われる orderは出力直前に行うのが鉄則 再現コード from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() df1 = spark.createDataFrame( [ ['…

PySparkのDataFrameでは同名のカラムが許容される

概要 PySparkのDataFrameでは同名のカラムが許容される select などカラム名を指定する処理時に例外が発生する カラム名を再定義、別名を付ける事で回避が可能 再現コード 作成時にカラム名が重複 from pyspark.sql import SparkSession spark = SparkSessio…

fstringの中でdictionary、setの内包表記を使用する

結論 l = ['a', 'b', 'c'] s1 = f'{ {s:s for s in l} }' # 中括弧の後にスペースが必要 assert s1 == "{'a': 'a', 'b': 'b', 'c': 'c'}" s2 = f'{ {s for s in l} }' # 中括弧の後にスペースが必要 assert s2 == "{'b', 'c', 'a'}" ※setの方は順番は保証さ…

Pythonのユニットテストでimportされている変数を上書きする

結論 直接モジュールの変数を上書きすれば良い ただし、importされた時点でそのモジュールの変数として扱われる事に注意 ※文字で見ても良くわからないと思うので下記のコードを参照 ケース1(テスト対象に直接変数がimportされている場合) テスト対象のコー…

GitHub ActionsでLOCALEがja_JP.UTF-8のPostgreSQLを使用する方法

結論 サービスコンテナでLOCALEに ja_JP.UTF-8 を設定することはできない 自力でLOCALEを追加するイメージを作って、docker run で起動する Dockerfile FROM postgres:11.5 RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF…

PostgreSQLのデフォルトLOCALEでは日本語文字列のソート結果が想定と異なる

概要 PostgreSQLをデフォルトのまま使用すると日本語文字列のソート結果が想定と異なる LOCALEを正しく設定することで修正可能 文字列の並び順は LC_COLLATE で制御されるこの設定がデフォルトだと en_US.utf8 となっていることが原因 動作確認環境 Docker P…

AtCoder用Python環境を作った

概要 最近AtCoderを始めたのでPython用の環境を作りました。 割といい感じにできた気がしましたのでTemplate Repositoryにしています。これから始める方、AtCoder上で書いている方などは是非試してみてください。 一方、まだ私自身が使い込んでいないので、…

Django REST Framework 条件に応じてAPI処理を切り替える方法

全然サンプル見つからなかったので誰かに役に立つかも?と、妥協点はあるもののとりあえず実装としては良さそうなのでメモ やりたかったこと 条件によって特定のAPI処理全体を切り替えたい 複数発生した場合を考えると if hogeflag: みたいな事はやりたくな…

自宅Raspberry Pi再構築メモ

自宅のRaspberry Piを再構築したのでメモです。既存のRaspberry Piのスクリプト関連はGitHubにあったものの、環境関連の情報が何も残っていなかったので新規に記事に起こしています。(文章にした記憶はあるものの見つからず) 完全に自分用なので、本来なら…

通信速度が原因で「apt-get」が失敗する事がある

タイトルだけ見るとそりゃそうだろという話ではあるのですが、いきなり失敗するようになってかなりハマったのでメモ。 そもそも通信速度が原因という事に気づくまでにかなりの時間がかかった。 参考までに、状況が発生した環境で通信速度を調べたところ、1Mb…

エンジニアとして一番大事だと思う事

ドアカン Advent Calendar 2019の24日目の記事になります。 昨日はYoshihiko Morikawaさんのフィルムカメラの話です。熱いですね。*1 はじめに いつの間にかITエンジニアとして若手からシニアと言う立場になってきた今日この頃です。(IT業界歴10年ちょっと…

GitHub ActionsでGitHub Package RegistryにDocker Imageをpushする

前の記事では手動でGithub Package RegistryにDocker Imageをpushしましたが、実際にはそんなの手でやってられません。こういう事はCIにやらせましょう。 GitHub Actions及びGitHub Package Registryは正式公開されたばかりだからか、情報が少なかったのでメ…

GitHub Package RegistryにDocker imageを格納する

公式のドキュメントでうまくいかなかったものの、検索しても記事がみつからなかったのでメモ。 (GitHub Actionsでのサンプルはいくつもあったが、手動でのサンプルがみつからなかった。) ※わかってる人なら特に記事にする事でもないので、サンプルがなかっ…

Windowsで今まで動いていたdocker runが失敗する

あまりわかってないけど、解決した & 日本語の情報がみつからなかったのでメモ エラーメッセージ SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context w…

GitHubのマージ済のブランチをGitHub Actionsで定期的に削除する

追記(2019/10/28) GitHubのリポジトリ設定にマージ完了後にブランチを削除する設定がありました。(2019/07/31に追加されたらしいです。)よって、GitHub Actionsなんて使用せずにリポジトリの設定を変更しましょう! help.github.com はじめに プルリク後…

setuptoolsがsetup.cfgを読んでくれない

現象 Pythonでsetuptoolsを使用してwheelファイルを作成しようとしたが、自動的に読んでくれるはずの「setup.cfg」を読んでくれない。 ※setup.pyで「setup(name='hoge')」などと指定すると正しく動作する ※正確には、license_fileなどで存在しないファイルを…

Windowsでpyenv(pyenv-win)

pyenvを使おうと思って公式見たらpyenv-win使えと書いてあった。 If you're on Windows, consider using @kirankotari's pyenv-win fork. (pyenv does not work on windows outside the Windows Subsystem for Linux) 使い方も含めてメモ pyenvとは Pythonの…

JDK 1.8.0_221を管理者権限がないWindowsにインストールする

今時Java8?管理者権限がないとかどういうこと?とか色々言いたい事はありますが、やらなきゃいけない事もあるのです。 同内容の記事がWeb上で見受けられますが、落とし穴いっぱいなので改めて記事にしています。 手順 jdkを取得 https://www.oracle.com/tec…

databricksでcreate tableを行った際にParquet does not support timestamp. See HIVE-6384が発生する

エラー詳細 stacktraceは長いので割愛 com.databricks.backend.common.rpc.DatabricksExceptions$SQLExecutionException: org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.UnsupportedOperationExcep…

PySparkで日付毎にデータを蓄積する際のdf.write.modeについて

概要 PySparkでpartitionByで日付毎に分けてデータを保存している場合、どのように追記していけば良いのか。 先にまとめ appendの方がメリットは多いが、チェック忘れると重複登録されるデメリットが怖い。 とはいえ、overwriteも他のデータ消えるデメリット…

PySparkで特定のカラムが全体の最大値であるレコードを取得する

概要 実現はできてはいたものの、もっと良いやり方ないかな?と聞いたら教えてもらったのでメモ。 うまく説明できないのでデータを記載します。 処理前 +----+------+ |name| date| +----+------+ | a|201906| | a|201907| | b|201906| | b|201907| | c|2019…

Databricksでは日本語は使用しない方が良い

概要 Databricksでファイル名、フォルダ名、引数では日本語を使用できない場合があるので、使用しない方が良い。 詳細 今時当たり前だが、Databricksでは普通に日本語を使用可能。 ファイル名やフォルダ名でもnotebbook単体で普通に使う分には問題ない。 だ…

PySparkでjsonカラムを縦持ちに変換する

正確には文字列でjsonが入っている時にパースして縦持ちにする方法。 また使いそうだが、すぐ忘れそうなのでメモ データ 元データ +---+--------------------------------------------------------------+ |id |json | +---+-------------------------------…

PySparkでread時に型が変わる

概要 PySparkで保存前はstringで、読み込むとintegerにカラムの型が変わっている現象に遭遇した。 原因としてはpartitionByで指定したカラムの型は自動的に推測されるため。 パーティションのカラムのデータタイプは自動的に推測されることに注意してくださ…

GreasemonkeyやTampermonkeyで外部CSSを読み込む

表題のまま。 久しぶりにuser script書いたら外部のCSSの読み込み方法がわからなかったのでメモ。 (昔、user scriptをよく書いてた時も外部のCSS読み込んでいたと思うんだけど、こんな方法使ってた記憶がない。。。どうやってたんだろう?) まとめ ヘッダ…