このガイドは、コード変更の提出前に必要なものも含め、Apache Sparkへの様々な貢献方法を説明しています。
Sparkへの貢献は、コードを書くだけではありません。メーリングリストで新規ユーザーを支援したり、リリースをテストしたり、ドキュメントを改善したりすることも歓迎されます。実際、重要なコード変更を提案するには、通常、他の方法で貢献することでコミュニティ内で経験と信頼性をまず得る必要があります。これは、効果的な貢献者になるためのガイドでもあります。
そのため、このガイドでは、長期的に関与しようとする新規貢献者が検討すべき貢献を順序立てて説明します。プルリクエストを開くだけでなく、他者を助ける実績を築きましょう。
user@spark.apache.org
メーリングリストまたはStackOverflowでユーザーからの質問に答えることは、Sparkに貢献する素晴らしい方法です。常に多くの新規Sparkユーザーがいるため、数分間かけて質問に答えることは、非常に価値のあるコミュニティサービスです。
貢献者はこのリストを購読し、Sparkで何が起こっているかを最新の状態に保つためにフォローする必要があります。質問に答えることは、コミュニティを支援し、専門性を示す優れた方法です。
メーリングリストでの効果的な議論の参加方法、およびStackOverflowなどのフォーラムについては、メーリングリストガイドを参照してください。
Sparkのリリースプロセスはコミュニティ指向であり、コミュニティのメンバーはdev@spark.apache.org
メーリングリストで新しいリリースに投票できます。Sparkユーザーは、このリストを購読して発表を受け取り、新しいリリースでワークロードをテストし、新しいリリースで見つかったパフォーマンスや正確性の問題に関するフィードバックを提供するように招待されています。
Sparkソースコードへの変更は、GitHubプルリクエスト(後述)を介して提案、レビュー、コミットされます。誰でもここでアクティブな変更を表示し、コメントできます。他の人の変更をレビューすることは、変更プロセスがどのように機能するかを学び、コードの様々な部分のアクティビティを理解する良い方法です。変更をレビューし、質問したり、問題(タイプミスや小さなスタイルの問題など)を指摘したりすることで、支援できます。https://spark-prs.appspot.com/も参照してください。これは、開いているPRを表示およびフィルタリングするための便利な方法です。
リリースドキュメント(つまり、https://spark.dokyumento.jp/docs/の下に表示されるドキュメント)への変更を提案するには、Sparkのdocs/
ディレクトリのMarkdownソースファイルを編集します。そのREADME
ファイルには、変更をテストするためにローカルでドキュメントをビルドする方法が示されています。ドキュメントの変更を提案するプロセスは、以下のコード変更を提案するプロセスと同じです。
https://spark.dokyumento.jp/docs/の下に表示されないドキュメント(つまり、ドキュメントの残りの部分)への変更を提案するには、同様にspark-websiteリポジトリのMarkdownを編集し、プルリクエストを開きます。
JavaおよびScalaアプリケーションは、JavaやScala自体には含まれていない膨大な数のライブラリやユーティリティにアクセスできますが、Sparkは豊富なライブラリエコシステムをサポートすることを目指しています。多くの新しい便利なユーティリティや機能は、コアではなくSparkの外側に属します。例えば、言語サポートはコアSparkの一部である必要がありますが、便利な機械学習アルゴリズムはMLlibの外側に存在することができます。
そのため、大規模で独立した新しい機能は、Spark自体への組み込みはしばしば拒否されますが、個別のプロジェクトとリポジトリとしてホストされ、spark-packages.orgコレクションに含めることができます。
理想的には、バグレポートには、バグを修正するための提案されたコード変更が添付されています。バグを発見した人がそれを修正する経験を持っていない場合、これは常に可能とは限りません。バグはJIRAを作成することで報告できますが、プルリクエストを作成せずに報告することもできます(下記参照)。
ただし、バグレポートは、バグを理解し、隔離し、理想的には再現するのに十分な情報が含まれている場合にのみ役立ちます。単にエラーが発生したからといって、バグを報告する必要があるわけではありません。以下のように、まずJIRAを検索し、Sparkのユーザー/開発者メーリングリストで検索および問い合わせを行ってください。再現不可能なバグや単純なエラーレポートは、閉じられる場合があります。
バグレポートに、どのコミットによってバグが導入されたかについての説明が含まれていると非常に役立ちます。これにより、レビューアーはバグを簡単に理解できます。また、プルリクエストがマージされたときに、コミッターがバグ修正をどの程度バックポートするべきかを決定する際にも役立ちます。バグを修正するためのプルリクエストは、問題を根本原因に絞り込む必要があります。
パフォーマンスの低下もバグの一種です。パフォーマンスの低下を修正するためのプルリクエストでは、問題が実際に修正されたことを証明するベンチマークを提供する必要があります。
データの正確性/データ損失のバグは非常に深刻であることに注意してください。対応するバグレポートのJIRAチケットにcorrectness
またはdata-loss
というラベルが付いていることを確認してください。バグレポートが十分な注目を集めていない場合は、より多くの注目を集めるためにdev@spark.apache.org
にメールを送信してください。
新しい機能を提案することも可能です。これらは、設計ドキュメントやコード変更など、詳細が添付されていない限り、一般的に役に立ちません。大規模な新しい貢献は、まずspark-packages.orgを検討するか(上記参照)、メーリングリストで最初に議論する必要があります。機能要求は拒否されるか、長期的な非アクティブ化後に閉じられる場合があります。
Apache Spark JIRAで発生した問題の膨大な量を考えると、必然的にいくつかの問題は重複しているか、時代遅れになり、最終的に別の方法で修正されるか、再現できないか、より詳細な説明が必要になるなどがあります。これらの問題を特定して解決することは、議論を進めることやJIRAを解決することによって役立ちます。ほとんどの貢献者は、直接JIRAを解決できます。変更は簡単に元に戻すことができるため、問題を解決できるかどうかについて十分な自信があるかどうかを判断してください。疑問がある場合は、JIRAにコメントを残すだけです。
JIRAを解決する際には、いくつかの便利な規則に従ってください。
Sparkは非常に忙しいプロジェクトであり、平均して数時間ごとに新しいJIRAまたはプルリクエストが発生します。レビューには、コミッターの時間が数時間から数日かかる場合があります。貢献者が有用で、明確で、評価が容易で、基本的なチェックにすでに合格している変更に焦点を当てることで、すべての人が利益を得ます。
場合によっては、貢献者には既に特定の新しい変更やバグが念頭に浮かんでいる場合があります。アイデアを探している場合は、JIRAのスタータータスクのリストを参照するか、user@spark.apache.org
メーリングリストに問い合わせてください。
先に進む前に、貢献者は提案された変更が関連性があり、新しく、実行可能であるかどうかを評価する必要があります。
user@spark.apache.org
に可能な変更についてメールを送信してください。user@spark.apache.org
およびdev@spark.apache.org
メーリングリストのアーカイブで関連する議論を検索します。多くの場合、問題はすでに議論されており、コード変更を必要としない解決策があるか、どのような変更が解決策として受け入れられないかが記録されています。spark [検索用語]
と入力します。論理的に同様の問題が既に存在する場合は、新しい問題を作成する代わりに、既存のJIRAとプルリクエストの議論に最初に貢献してください。Sparkのコア、またはSQLやCatalystのような非常に複雑で重要なモジュールへの変更は、正しく行うのがより困難であることを改めて強調しておきます。これらはより厳格な精査の対象となり、それほど重要ではないコードへの変更よりも高いレビュー基準が適用されます。
豊富なアルゴリズムセットはMLlibの重要な目標ですが、プロジェクトをスケーリングするには、保守性、一貫性、コード品質を優先する必要があります。新しいアルゴリズムは次のとおりです。
@Since
アノテーションが付いている。Sparkでスローされる例外は、標準化され、実行可能なエラーメッセージに関連付ける必要があります。
エラーメッセージは、次の質問に答える必要があります。
エラーメッセージを作成する際には、次のことを行う必要があります。
詳細は、エラーメッセージに関するガイドラインを参照してください。
コードへの貢献方法を検討する前に、コードのレビュー方法と変更が拒否される理由を理解することが役立ちます。Googleのエンジニアリングプラクティスドキュメントにあるコードレビュー担当者向け詳細ガイドを参照してください。簡単に言えば、メリットが多く、デメリットやリスクが少ない変更ほど、マージされやすく、迅速にマージされます。リスクが高く価値の低い変更は、マージされる可能性が非常に低く、レビューの繰り返しを受けるのではなく、完全に拒否される可能性があります。
コード変更を提案する前に、前のセクションを確認してください。このセクションでは、その方法について説明します。
コードを寄稿する際には、その寄稿があなたのオリジナル作品であり、プロジェクトのオープンソースライセンスに基づいてプロジェクトにその作品をライセンス供与することに同意したものとします。明示的に述べるかどうかにかかわらず、プルリクエスト、電子メール、その他の手段を介して著作権のある資料を送信することにより、あなたはプロジェクトのオープンソースライセンスに基づいて資料をライセンス供与することに同意し、そうする法的権限を有することを保証します。
開発中の最新のコードを使用したり、Apache Sparkの開発に貢献したりすることに関心がある場合は、Gitからmasterブランチをチェックアウトできます。
# Master development branch
git clone git://github.com/apache/spark.git
Sparkをダウンロードしたら、インストールとビルドの方法については、ドキュメントページを参照してください。
一般的に、SparkではJIRAを使用してバグや改善を含む論理的な問題を追跡し、GitHubのプルリクエストを使用して特定のコード変更のレビューとマージを管理します。つまり、JIRAは修正または変更する必要があるものと、上位レベルのアプローチを説明するために使用され、プルリクエストはプロジェクトのソースコードでその変更を実装する方法を説明します。たとえば、主要な設計上の決定はJIRAで議論されます。
Foo scaladocのタイプミスを修正する
correctness
:正確性の問題data-loss
:データ損失の問題release-notes
:変更の影響はリリースノートに記載する必要があります。JIRAまたはプルリクエストには、リリースノートに含めるのに適した詳細を含める必要があります。「ドキュメントテキスト」を参照してください。starter
:新しい貢献者にとって適した、小さくシンプルな変更dev@spark.apache.org
で問題に関する議論を検討してください。Apache Sparkでプルリクエストを作成する前に、ブランチでテストがパスできるかどうかを確認することが重要です。これは、GitHub Actionsのワークフローがプルリクエスト/後続のコミットのテストを自動的に実行し、各実行がApache SparkリポジトリのGitHub Actionsの限られたリソースに負担をかけるためです。次の手順でプロセスを進めます。
test("SPARK-12345: a short description of the test") {
...
@Test
public void testCase() {
// SPARK-12345: a short description of the test
...
def test_case(self):
# SPARK-12345: a short description of the test
...
test_that("SPARK-12345: a short description of the test", {
...
./dev/run-tests
を使用してすべてのテストを実行し、コードがまだコンパイルされ、テストに合格し、スタイルチェックに合格することを確認します。スタイルチェックに失敗した場合は、以下のコードスタイルガイドを確認してください。apache/spark
のmaster
ブランチに対して開きます。(特別な場合を除き、PRは他のブランチに対して開かれません)。これにより、「あなたの」フォークされたリポジトリで成功したワークフロールンを探します/監視する「On pull request*」(Sparkリポジトリ)ワークフローがトリガーされます(実行中の場合は待機します)。[SPARK-xxxx][COMPONENT] タイトル
の形式にする必要があります。ここで、SPARK-xxxx
は関連するJIRA番号、COMPONENT
はspark-prs.appspot.comに示されているPRカテゴリの1つ、タイトルはJIRAのタイトルまたはPR自体をより具体的に説明するタイトルです。[WIP]
を追加します。@username
を追加して、すぐに通知することができます。git remote add upstream https://github.com/apache/spark.git
、続いてgit fetch upstream
とgit rebase upstream/master
を実行し、手動で競合を解決した後、結果をあなたのブランチにプッシュします。master
ブランチ以外に対してプルリクエストの作成を求められるまれなケースでは、プルリクエストを手動でクローズする必要があることに注意してください。既存のコードベースのスタイルに従ってください。
適切なスタイルが不明な場合は、既存のコードベースのスタイルに従ってください。あなたの機能を使用する他の例がコードにあるかどうかを確認してください。dev@spark.apache.org
リストで質問したり、コミッターに質問したりすることもできます。
Apache SparkプロジェクトはApache Software Foundation行動規範に従います。行動規範は、IRC、すべての公開および非公開メーリングリスト、問題トラッカー、wiki、ブログ、Twitter、およびコミュニティで使用されるその他の通信チャネルなど、Apache Software Foundationが管理するすべてのスペースに適用されます。対面イベント(会議など)に固有の行動規範は、公開されているASFハラスメント防止ポリシーに規定されています。
この行動規範は、公式または非公式にApacheコミュニティに参加するすべての人、または財団との提携を主張するすべての人、財団関連の活動、特にASFを代表する役割において、遵守されることを期待しています。
このコードは網羅的または完全ではありません。これは、共同作業、共有環境、および目標に関する私たちの共通の理解を蒸留することを目的としています。私たちは、文字通りだけでなく精神的にも遵守されることを期待しています。そうすることで、私たち全員と、私たちが参加する技術コミュニティを豊かにすることができます。
詳細情報と具体的なガイドラインについては、Apache Software Foundation行動規範を参照してください。