簡體   English   中英

Spark Group By和帶有Rank功能運行非常慢

[英]Spark Group By and with Rank function is running very slow

我正在編寫一個用於在一個時間范圍內查找訪問的前n個URL的spark應用。 但是,此作業可以繼續運行,並且在一個實例中的ES中需要花費數小時來處理389451條記錄。 我想減少這個時間。

我正在從彈性搜索中讀取波紋

 val df = sparkSession.read
    .format("org.elasticsearch.spark.sql")
    .load(date + "/" + business)
    .withColumn("ts_str", date_format($"ts", "yyyy-MM-dd HH:mm:ss")).drop("ts").withColumnRenamed("ts_str", "ts")
    .select(selects.head, selects.tail:_*)
    .filter($"ts" === ts)
    .withColumn("url", split($"uri", "\\?")(0)).drop("uri").withColumnRenamed("url", "uri").cache()

在上面的DF中,我正在從ElasticSearch中讀取和過濾。 我也從URI中刪除查詢參數。

然后我在做分組

var finalDF = df.groupBy("col1","col2","col3","col4","col5","uri").agg(sum("total_bytes").alias("total_bytes"), sum("total_req").alias("total_req"))

然后我正在運行窗口功能

val partitionBy = Seq("col1","col2","col3","col4","col5")

val window = Window.partitionBy(partitionBy.head, partitionBy.tail:_*).orderBy(desc("total_req"))


finalDF = finalDF.withColumn("rank", rank.over(window)).where($"rank" <= 5).drop("rank")

然后我正在將finalDF寫給cassandra

finalDF.write.format("org.apache.spark.sql.cassandra").options(Map("table" -> "table", "keyspace" -> "keyspace")).mode(SaveMode.Append).save()

我在ES群集中​​有4個數據節點,而我的Spark機器是16核64GB Ram VM。 請幫助我找到問題所在。

在讀取后保留數據幀可能是一個好主意,因為您將在排名函數中使用很多次。

暫無
暫無

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

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