[英]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()
首先,您應該弄清楚實際花費的時間最多。
例如,確定只是讀取數據需要多長時間
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.