タグ付けされた質問 「apache-spark-sql」

Apache Spark SQLは、高速で汎用的なクラスターコンピューティングシステムであるSparkでの「SQLおよび構造化データ処理」のためのツールです。Hive、Parquetなどからデータを取得し、既存のRDDおよびデータセットに対してSQLクエリを実行するために使用できます。

10
ApacheSparkのリストとしてデータフレームの列値を抽出します
データフレームの文字列列をリストに変換したい。DataframeAPIからわかるのはRDDなので、まずRDDに変換してtoArrayから、RDDに関数を適用してみました。この場合、長さとSQLは問題なく機能します。ただし、RDDから取得した結果には、このようなすべての要素を角かっこで囲んでいます[A00001]。列をリストに変換する適切な方法や、角かっこを削除する方法があるかどうか疑問に思いました。 任意の提案をいただければ幸いです。ありがとうございました!


8
pysparkデータフレームの列を削除する方法
>>> a DataFrame[id: bigint, julian_date: string, user_id: bigint] >>> b DataFrame[id: bigint, quan_created_money: decimal(10,0), quan_created_cnt: bigint] >>> a.join(b, a.id==b.id, 'outer') DataFrame[id: bigint, julian_date: string, user_id: bigint, id: bigint, quan_created_money: decimal(10,0), quan_created_cnt: bigint] 2つid: bigintあり、1つ削除したい。どのようにできるのか?


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分悪くないですが、ヘルプにこの質問に答える前にこれをやっているだろうそこに人を探しています。

1
Spark:UDFが何度も実行された
次のコードのデータフレームがあります。 def test(lat: Double, lon: Double) = { println(s"testing ${lat / lon}") Map("one" -> "one", "two" -> "two") } val testUDF = udf(test _) df.withColumn("test", testUDF(col("lat"), col("lon"))) .withColumn("test1", col("test.one")) .withColumn("test2", col("test.two")) ログを確認したところ、行ごとにUDFが3回実行されていることがわかりました。「test.three」列から「test3」を追加すると、UDFがもう一度実行されます。 なぜ誰かが私に理由を説明できますか? これは適切に回避できますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.