1. ホーム
  2. dataframe

再現性の高いApache Sparkのサンプルの作り方

2023-09-28 19:33:50

質問

私は、いくつかの質問を読むのにかなりの時間を費やしてきました。 pyspark spark-dataframe タグを使用していますが、投稿者が自分の質問を本当に理解するのに十分な情報を提供していないことがよくあります。私は通常、投稿者に MCVE を投稿するよう依頼しますが、入出力データのサンプルを見せるように依頼するのは、歯を抜くようなものです。

おそらく、問題の一部は、人々がspark-dataframe用のMCVEを簡単に作成する方法を知らないということです。私は、次のような spark-dataframe バージョンがあると便利だと思います。 このpandasの質問 のspark-dataframeバージョンがあれば、リンクできるガイドとして便利だと思います。

では、再現性のある良い例を作るにはどうしたらよいのでしょうか?

どのように解決するのか?

簡単に再現できる小さなサンプルデータを用意する。

少なくとも、投稿者はデータフレームとそれを簡単に作成するために使用できるコードについて、いくつかの行と列を提供する必要があります。簡単にというのは、カットアンドペーストという意味です。あなたの問題を実証するために、できるだけ小さくしてください。


以下のようなデータフレームがあります。

+-----+---+-----+----------+
|index|  X|label|      date|
+-----+---+-----+----------+
|    1|  1|    A|2017-01-01|
|    2|  3|    B|2017-01-02|
|    3|  5|    A|2017-01-03|
|    4|  7|    B|2017-01-04|
+-----+---+-----+----------+

のように、このコードで作成することができます。

df = sqlCtx.createDataFrame(
    [
        (1, 1, 'A', '2017-01-01'),
        (2, 3, 'B', '2017-01-02'),
        (3, 5, 'A', '2017-01-03'),
        (4, 7, 'B', '2017-01-04')
    ],
    ('index', 'X', 'label', 'date')
)


希望する出力を表示する。

具体的な質問をし、希望する出力を示してください。


新しいカラムを作成する方法 'is_divisible' という値を持つ 'yes' の月の日であれば 'date' に7日を加えたものが列の値で割り切れる場合は 'X' , 'no' でなければ?

希望する出力。

+-----+---+-----+----------+------------+
|index|  X|label|      date|is_divisible|
+-----+---+-----+----------+------------+
|    1|  1|    A|2017-01-01|         yes|
|    2|  3|    B|2017-01-02|         yes|
|    3|  5|    A|2017-01-03|         yes|
|    4|  7|    B|2017-01-04|          no|
+-----+---+-----+----------+------------+


出力の方法を説明する。

どのようにして目的の出力を得るのか、詳細に説明しましょう。計算例を示すとよいでしょう。


たとえば 1 行目では、X = 1、日付 = 2017-01-01 です。日付に7日を足すと、2017-01-08となります。日は8であり、8は1で割り切れるので、答えは「はい」です。

同様に、最後の行については、X = 7と日付= 2017-01-04です。日付に7を足すと、月の日として11が得られます。11 % 7 は 0 ではないので、答えは「いいえ」です。


既存のコードを共有する。

あなたが行ったこと、または試したことを教えてください。 すべて * を含めて、何をやったのか、何を試したのかを教えてください。また、エラーが発生した場合は、そのエラーメッセージも含めて、どこで困っているのかを教えてください。

(*スパークコンテキストを作成するコードを省くことはできますが、すべてのインポートを含める必要があります。)


という新しいカラムを追加する方法を知っています。 date に 7 日を加えたものですが、月の日数を整数で取得するのに苦労しています。

from pyspark.sql import functions as f
df.withColumn("next_week", f.date_add("date", 7))


バージョン、インポートを含み、シンタックスハイライトを使用する


パフォーマンスチューニングの投稿には、実行計画を含めます。


spark 出力ファイルのパース

  • 最大値 で有用なコードを提供しました。 この回答 を使用して、Sparkの出力ファイルをDataFrameにパースするのに役立ちます。

その他の注意事項