タグ付けされた質問 「pyspark」

Spark Python API(PySpark)は、Apache-sparkプログラミングモデルをPythonに公開します。

2
Spark:私のユースケースでPythonがScalaを大幅に上回っているのはなぜですか?
PythonとScalaを使用しているときのSparkのパフォーマンスを比較するために、両方の言語で同じジョブを作成し、ランタイムを比較しました。私は両方のジョブにほぼ同じ時間がかかると予想していましたが、Pythonのジョブだけがかかりましたが27min、Scalaのジョブはかかりました37min(ほぼ40%長くなります!)。私はJavaにも同じジョブを実装しましたが、それもかかり37minutesました。どうしてこれがPythonがそんなに速いのか 最小限の検証可能な例: Pythonジョブ: # Configuration conf = pyspark.SparkConf() conf.set("spark.hadoop.fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider") conf.set("spark.executor.instances", "4") conf.set("spark.executor.cores", "8") sc = pyspark.SparkContext(conf=conf) # 960 Files from a public dataset in 2 batches input_files = "s3a://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027312025.20/warc/CC-MAIN-20190817203056-20190817225056-00[0-5]*" input_files2 = "s3a://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027312128.3/warc/CC-MAIN-20190817102624-20190817124624-00[0-3]*" # Count occurances of a certain string logData = sc.textFile(input_files) logData2 = sc.textFile(input_files2) a = logData.filter(lambda value: …

1
Pyspark dfからPostgresSQLに5,000万以上を書き込む、最も効率的なアプローチ
数百万のレコードを挿入する最も効率的な方法は、SparkデータフレームからPostgresテーブルに5,000万を挿入することです。私もこれまで成功したバルクコピーとバッチサイズオプションを利用して、これをSparkから MSSQLまで実現しました。 Postgresのためにここにあることができる同様のものはありますか? 私が試したコードとプロセスの実行にかかった時間を追加します: def inserter(): start = timer() sql_res.write.format("jdbc").option("numPartitions","5").option("batchsize","200000")\ .option("url", "jdbc:postgresql://xyz.com:5435/abc_db") \ .option("dbtable", "public.full_load").option("user", "root").option("password", "password").save() end = timer() print(timedelta(seconds=end-start)) inserter() したがって、1000万レコードに対して上記のアプローチを実行しnumPartitions、で指定されているように5つの並列接続があり、バッチサイズを200kにしてみました。 プロセスにかかった合計時間は0:14:05.760926(14分5秒)でした。 時間を短縮する他の効率的なアプローチはありますか? 私が使用できる効率的または最適なバッチサイズは何ですか?バッチサイズを大きくすると、作業が速くなりますか?または、複数の接続を開く、つまり5を超えると、プロセスが速くなりますか? 上千万レコードの平均14分悪くないですが、ヘルプにこの質問に答える前にこれをやっているだろうそこに人を探しています。

3
Spark 2.4.4をインストールした後にpysparkを実行しようとすると「TypeError:integer is required(got type bytes)」エラーを修正する方法
OpenJDK 13.0.1、Python 3.8、Spark 2.4.4をインストールしました。インストールをテストする手順は、sparkインストールのルートから。\ bin \ pysparkを実行することです。いくつかの環境変数の設定など、sparkのインストールの手順を逃したかどうかはわかりませんが、それ以上の詳細な手順は見つかりません。 私は自分のマシンでpythonインタープリターを実行できるので、正しくインストールされ、「java -version」を実行すると期待どおりの応答が得られると確信しているので、どちらにも問題があるとは思いません。 cloudpickly.pyからエラーのスタックトレースを取得します。 Traceback (most recent call last): File "C:\software\spark-2.4.4-bin-hadoop2.7\bin\..\python\pyspark\shell.py", line 31, in <module> from pyspark import SparkConf File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\__init__.py", line 51, in <module> from pyspark.context import SparkContext File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\context.py", line 31, in <module> from pyspark import accumulators File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\accumulators.py", line 97, in …

1
pandasUDFおよびpyarrow 0.15.0
最近pyspark、EMRクラスターで実行されている多数のジョブで多数のエラーが発生し始めました。エラーは java.lang.IllegalArgumentException at java.nio.ByteBuffer.allocate(ByteBuffer.java:334) at org.apache.arrow.vector.ipc.message.MessageSerializer.readMessage(MessageSerializer.java:543) at org.apache.arrow.vector.ipc.message.MessageChannelReader.readNext(MessageChannelReader.java:58) at org.apache.arrow.vector.ipc.ArrowStreamReader.readSchema(ArrowStreamReader.java:132) at org.apache.arrow.vector.ipc.ArrowReader.initialize(ArrowReader.java:181) at org.apache.arrow.vector.ipc.ArrowReader.ensureInitialized(ArrowReader.java:172) at org.apache.arrow.vector.ipc.ArrowReader.getVectorSchemaRoot(ArrowReader.java:65) at org.apache.spark.sql.execution.python.ArrowPythonRunner$$anon$1.read(ArrowPythonRunner.scala:162) at org.apache.spark.sql.execution.python.ArrowPythonRunner$$anon$1.read(ArrowPythonRunner.scala:122) at org.apache.spark.api.python.BasePythonRunner$ReaderIterator.hasNext(PythonRunner.scala:406) at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37) at org.apache.spark.sql.execution.python.ArrowEvalPythonExec$$anon$2.<init>(ArrowEvalPythonExec.scala:98) at org.apache.spark.sql.execution.python.ArrowEvalPythonExec.evaluate(ArrowEvalPythonExec.scala:96) at org.apache.spark.sql.execution.python.EvalPythonExec$$anonfun$doExecute$1.apply(EvalPythonExec.scala:127)... それらはすべてapplyパンダシリーズの機能で発生するようです。私が見つけた唯一の変更は、pyarrow土曜日(05/10/2019)に更新されたものです。テストは0.14.1で動作するようです だから私の質問は、これが新しく更新されたpyarrowのバグであるかどうか、またはpandasUDFを将来使用しにくくする重要な変更があるかどうかを誰かが知っているかどうかです。

1
Apache Spark:結合に対する再パーティション化、並べ替え、キャッシュの影響
テーブルをそれ自体に結合するときのSparkの動作を調査しています。Databricksを使用しています。 私のダミーのシナリオは: 外部テーブルをデータフレームAとして読み取ります(基礎となるファイルはデルタ形式です) 特定の列のみが選択されたデータフレームBをデータフレームAとして定義する column1とcolumn2のデータフレームAとBを結合する (はい、あまり意味がありません。Sparkの基礎となるメカニズムを理解するために実験しているだけです) a = spark.read.table("table") \ .select("column1", "column2", "column3", "column4") \ .withColumn("columnA", lower((concat(col("column4"), lit("_"), col("column5"))))) b = a.select("column1", "column2", "columnA") c= a.join(b, how="left", on = ["column1", "column2"]) 私の最初の試みは、コードをそのまま実行することでした(試行1)。次に、パーティションの分割とキャッシュを試みました(2回試行)。 a = spark.read.table("table") \ .select("column1", "column2", "column3", "column4") \ .withColumn("columnA", lower((concat(col("column4"), lit("_"), col("column5"))))) .repartition(col("column1"), col("column2")).cache() 最後に、パーティションを分割し、並べ替え、キャッシュしました a = …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.