文章

Docker Redis 架設教學

Redis 幾乎是現今大型網路應用(Application)都會使用的 in-memory 資料庫(database),可應用在實作快取(cache), message broker 等功能,目前絕大多數都使用 Redis 作為快取後端(backend), 該服務也經常會與 memcached 相提並論,不過 Redis 支援的功能更加多元,例如 Redis 提供多種不同的 data types (set, lists, hashes 等)、支援 transaction 等用法,如果運用得當,不僅可以簡化程式邏輯,也能帶來系統效率提升。

本文記錄如何在本機(localhost)環境以 Docker 架設 Redis 以供開發使用。

Posted on  Sep 14, 2022  in  用 Docker 架設服務  by  Amo Chen  ‐ 2 min read

jq - 用 startswith & endswith 過濾 JSON 資料

jq 是方便且成熟的 JSON 資料操作工具,可以幫助我們快速對 JSON 型態的資料進行擷取(extract)、過濾(filter)、運算(computing)甚至是重組(transform)等操作。

如果是常常需要與 JSON 格式資料打交道的開發者,可以投資一些時間好好熟悉 jq, 不過由於該工具提供各式各樣的功能,所以不免使用前要稍微查閱文件一番。

本文透過實際範例學習如何操作 jq 提供的 startswithendswith 函式進行資料篩選與過濾。

Posted on  Sep 12, 2022  in  Unix-like 命令列教學  by  Amo Chen  ‐ 2 min read

Docker volumes 教學 - 從不熟到略懂

談到 Docker 容器的資料儲存(storage)問題,基本直覺就是透過掛載 Volumes, 不過 Docker 的 Volumes 其實有 3 種不同類型(types):

  1. Bind mount
  2. Volume
  3. tmpfs mount

大家常用的 -v <Host 路徑>:<Container 路徑> 參數其實就是使用 bind mount, 例如以下指令:

$ docker run -it -v /home/user:/data debian /bin/bash

簡而言之,使用 bind mount 的 volume 其實就是透過 host machine 的檔案系統(filesystem)提供容器儲存的能力。

雖然不清楚 volume 的類型,並不會對日常使用上造成任何問題,不過理解其差異仍有其必要,因爲這些差異很可能會在 production 環境上產生重大影響。

Posted on  Apr 1, 2022  in  Docker  by  Amo Chen  ‐ 5 min read

Python 套件介紹 - smart_open 不僅聰明還很好用

現今後端(backend)儲存解決方案相較於以往多了許多選擇,從傳統的硬碟儲存到現代各式各樣的雲端儲存服務,例如 AWS S3, Google Cloud Storage, Azure Blob Storage 甚至 HDFS(Hadoop Distributed File System) 等等,因此開發過程不免都會遇到需要整合雲端儲存方案的問題,與其重新發明輪胎,不如選擇 1 套簡單易用而且通吃各家服務的套件,不僅省事還能有效增加開發效率。

所以,你需要 smart_open 的幫忙!

Posted on  Feb 12, 2022  in  Python 模組/套件推薦  by  Amo Chen  ‐ 3 min read

零經驗也可的 PySpark 教學 - 初體驗

Apache Spark 是現今處理巨量資料(large-scale data)分析、資料處理、機器學習(machine learning)的主流叢集運算框架之一,其主打簡單、快速、可擴充(scalable)、統一介面(unified) 4 大特點,更支援多種語言(Python, Java, R, SQL)可供靈活選擇運用。

Spark 採用的是 In-memory 運算技術,運算的資料存在於記憶體之中,相對於使用硬碟等儲存媒介的運算框架(例如 Apache Hadoop)而言, Spark 具有運算速度的優勢。

此外,除了提供核心運算功能的 Spark Core, Apache Spark 更在其基礎上衍生 Spark SQL, Spark Streaming, MLlib, GraphX 四大功能:

  • Spark SQL - 支援以 SQL 對資料進行操作、運算
  • Spark Streaming - 讓 Spark 能夠處理串流(streaming)形式的資料
  • MLlib - 增加機器學習(machine learning)的相關函式庫(library),讓開發者得以利用 Apache Spark 進行機器學習相關的運算
  • GraphX - 支援圖論(graph theory)相關的運算,像社群網絡(social network)相關數據分析就適合使用 GraphX 進行運算

引用自 https://databricks.com

綜觀來說,Apache Spark 是相當值得投資學習的一套運算框架。

本文將透過 Docker 以及 PySpark 為初學者提供接觸 Apache Spark 的一條捷徑。

Last updated on  Dec 16, 2022  in  Python 模組/套件推薦 , Python 程式設計 - 高階  by  Amo Chen  ‐ 5 min read

Apache Parquet 深度介紹與說明

資料科學(data science)的興起以及日益增長的大資料的分析需求,傳統以資料列為導向(row-oriented)的儲存方式逐漸顯現其未逮之處,因此以欄位為導向(column-oriented, 或稱 columnar)的儲存方式應運而生,其中 Apache Parquet 是相當知名的 columnar 檔案格式,也能夠搭配 Hive, Spark 等知名的 Apache 開源專案使用。

本文將介紹 Apache Parquet 儲存格式,並且透過實際操作理解 Parquet 格式與其奧妙之處。

Posted on  Jan 18, 2022  in  資訊技術探索  by  Amo Chen  ‐ 7 min read

Docker CMD 與 ENTRYPOINT 說明詳解

寫 Dockerfile 時,經常搞不清楚 CMDENTRYPOINT 的差異,雖然兩者用途相當雷同,但還是特別查閱了一下 Docker 的官方文件,了解兩者的用途以及差別,並且透過實際的範例驗證後,記錄成本文。

Posted on  Dec 28, 2021  in  Docker  by  Amo Chen  ‐ 5 min read