日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spark比java快吗_为什么我的Spark DataFrame比RDD慢得多?

發布時間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark比java快吗_为什么我的Spark DataFrame比RDD慢得多? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這兩個數字似乎都相對較高,并且不清楚如何創建 DataFrame 或測量時間,但一般來說,這樣的差異可以通過與分區數量相比較少的記錄來解釋 .

spark.sql.shuffle.partitions 的默認值為200,表示您獲得的任務數 . 使用50K記錄時,啟動任務的開銷將高于從并行執行中獲得的加速 . 讓我們用一個簡單的例子來說明 . 首先讓我們創建一個示例數據:

import string

import random

random.seed(323)

def random_string():

n = random.randint(3, 6)

return (''.join(random.choice(string.ascii_uppercase) for _ in range(n)), )

df = (sc

.parallelize([random_string() for _ in range(50000)], 8).toDF(["name"])

.cache())

并根據 shuffle.partitions 的數量來衡量時間:

sqlContext.setConf("spark.sql.shuffle.partitions", "1")

%timeit -n 10 df.groupby('name').count().collect()

## 10 loops, best of 3: 504 ms per loop

sqlContext.setConf("spark.sql.shuffle.partitions", "1")

%timeit -n 10 df.groupby('name').count().collect()

## 10 loops, best of 3: 451 ms per loop

sqlContext.setConf("spark.sql.shuffle.partitions", "100")

%timeit -n 10 df.groupby('name').count().collect()

## 10 loops, best of 3: 624 ms per loop

sqlContext.setConf("spark.sql.shuffle.partitions", "200")

%timeit -n 10 df.groupby('name').count().collect()

## 10 loops, best of 3: 778 ms per loop

sqlContext.setConf("spark.sql.shuffle.partitions", "1000")

%timeit -n 10 df.groupby('name').count().collect()

## 10 loops, best of 3: 1.75 s per loop

雖然這些值與您聲稱的值不可比,并且此數據已在本地模式下收集,但您可以看到相對清晰的模式 . 這同樣適用于RDD:

from operator import add

%timeit -n 10 df.rdd.map(lambda x: (x['name'], 1)).reduceByKey(add, 1).collect()

## 10 loops, best of 3: 414 ms per loop

%timeit -n 10 df.rdd.map(lambda x: (x['name'], 1)).reduceByKey(add, 10).collect()

## 10 loops, best of 3: 439 ms per loop

%timeit -n 10 df.rdd.map(lambda x: (x['name'], 1)).reduceByKey(add, 100).collect()

## 10 loops, best of 3: 1.3 s per loop

%timeit -n 10 df.rdd.map(lambda x: (x['name'], 1)).reduceByKey(add, 1000).collect()

## 10 loops, best of 3: 8.41 s per loop

在適當的分布式環境中,由于網絡IO的成本,這將更高 .

僅供比較,讓我們檢查在沒有Spark的情況下在本地執行此任務需要多長時間

from collections import Counter

data = df.rdd.flatMap(lambda x: x).collect()

%timeit -n 10 Counter(data)

## 10 loops, best of 3: 9.9 ms per loop

您還應該查看數據位置 . 根據您使用的存儲和配置,即使使用這樣的小輸入,這也會給您的作業增加額外的延遲 .

總結

以上是生活随笔為你收集整理的spark比java快吗_为什么我的Spark DataFrame比RDD慢得多?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。