簡體   English   中英

提高Spark應用程序的速度

[英]Improve speed of spark app

這是我的python-spark代碼的一部分,對於我的需求,它的某些部分運行太慢。 尤其是這部分代碼,我真的很想提高它的速度,但不知道如何。 目前,要保存6000萬個數據行大約需要1分鍾,我希望將其縮短到10秒以內。

sqlContext.read.format("org.apache.spark.sql.cassandra").options(table="axes", keyspace=source).load() 

我的Spark應用程序的更多上下文:

article_ids = sqlContext.read.format("org.apache.spark.sql.cassandra").options(table="article_by_created_at", keyspace=source).load().where(range_expr).select('article','created_at').repartition(64*2)

axes = sqlContext.read.format("org.apache.spark.sql.cassandra").options(table="axes", keyspace=source).load()
speed_df = article_ids.join(axes,article_ids.article==axes.article).select(axes.article,axes.at,axes.comments,axes.likes,axes.reads,axes.shares) \
     .map(lambda x:(x.article,[x])).reduceByKey(lambda x,y:x+y) \
     .map(lambda x:(x[0],sorted(x[1],key=lambda y:y.at,reverse = False))) \
     .filter(lambda x:len(x[1])>=2) \
     .map(lambda x:x[1][-1]) \
     .map(lambda x:(x.article,(x,(x.comments if x.comments else 0)+(x.likes if x.likes else 0)+(x.reads if x.reads else 0)+(x.shares if x.shares else 0))))    

非常感謝您的建議。

編輯:

計數占用大多數時間(50秒)不參加

我還嘗試使用來提高並行度,但是並沒有任何明顯的效果:

sqlContext.read.format("org.apache.spark.sql.cassandra").options(table="axes", keyspace=source).load().repartition(number) 

sqlContext.read.format("org.apache.spark.sql.cassandra").options(table="axes", keyspace=source,numPartitions=number).load()

這是Spark的圖片,顯示了每次操作需要多長時間

首先,您應該弄清楚實際花費的時間最多。

例如,確定只是讀取數據需要多長時間

axes = sqlContext
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(table="axes", keyspace=source)
  .load()
  .count()

增加並行性或並行讀取器的數量可能會有所幫助,但前提是您沒有使Cassandra群集的IO最大化。

其次,看看是否可以使用Dataframes api進行所有操作。 每次使用python lambda時,都會在python和scala類型之間產生序列化費用。

編輯:

sqlContext.read.format("org.apache.spark.sql.cassandra").options(table="axes", keyspace=source).load().repartition(number) 

僅在加載完成才會生效因此對您沒有幫助。

sqlContext.read.format("org.apache.spark.sql.cassandra").options(table="axes", keyspace=source,numPartitions=number).load()

對於Spark Cassandra Connector不是有效的參數,因此不會執行任何操作。

參見https://github.com/datastax/spark-cassandra-connector/blob/master/doc/reference.md#read-tuning-parameters輸入拆分大小確定要在Spark分區中放置多少個C *分區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM