相关疑难解决方法(0)

如何最大程度地减少Spark数据帧Join上的重排?

我有两个这样的数据框

  student_rdf = (studentid, name, ...)
  student_result_rdf = (studentid, gpa, ...)
Run Code Online (Sandbox Code Playgroud)

我们需要加入这两个数据框。我们现在正在这样做,

student_rdf.join(student_result_rdf, student_result_rdf["studentid"] == student_rdf["studentid"])
Run Code Online (Sandbox Code Playgroud)

这样很简单。但是它会在工作节点之间创建大量数据改组,但是由于连接键是相似的,并且如果可以使用该键(studentid)对数据帧(理解partitionkey)进行分区,那么根本就不会进行改组。由于相似的数据将驻留在相似的节点中。可能吗?

当我从输入中读取数据帧时,我正在寻找一种基于列对数据进行分区的方法。并且如果Spark可能理解两个数据帧的两个partitionkey是相似的,那又如何呢?

apache-spark

6
推荐指数
0
解决办法
335
查看次数

为什么在重新分区 Spark 数据帧时会得到这么多空分区?

我想在 3 列上对数据框“df1”进行分区。对于这 3 列,此数据框恰好有 990 个独特的组合:

In [17]: df1.createOrReplaceTempView("df1_view")

In [18]: spark.sql("select count(*) from (select distinct(col1,col2,col3) from df1_view) as t").show()
+--------+                                                                      
|count(1)|
+--------+
|     990|
+--------+
Run Code Online (Sandbox Code Playgroud)

为了优化这个数据帧的处理,我想对 df1 进行分区以获得 990 个分区,每个关键可能性一个:

In [19]: df1.rdd.getNumPartitions()
Out[19]: 24

In [20]: df2 = df1.repartition(990, "col1", "col2", "col3")

In [21]: df2.rdd.getNumPartitions()
Out[21]: 990
Run Code Online (Sandbox Code Playgroud)

我写了一个简单的方法来计算每个分区中的行数:

In [22]: def f(iterator):
    ...:     a = 0
    ...:     for partition in iterator:
    ...:         a = a + 1
    ...:     print(a)
    ...: 

In [23]: df2.foreachPartition(f)
Run Code Online (Sandbox Code Playgroud)

我注意到实际上我得到的是 628 个带有一个或多个键值的分区,以及 362 …

partitioning apache-spark apache-spark-sql pyspark

5
推荐指数
1
解决办法
2658
查看次数

在 Spark 中加入多个表的有效方法 - 设备上没有剩余空间

这里也有人问类似的问题,但它没有正确解决我的问题。我有近 100 个数据帧,每个数据帧至少有200,000行,我需要通过full基于列进行连接来加入它们ID,从而创建一个带有列的数据帧 - ID, Col1, Col2,Col3,Col4, Col5..., Col102

只是为了说明,我的 DataFrames 的结构 -

df1 =                          df2 =            df3 =          .....  df100 = 
+----+------+------+------+    +----+------+    +----+------+         +----+------+ 
|  ID|  Col1|  Col2|  Col3|    |  ID|  Col4|    |  ID|  Col5|         |  ID|Col102|
+----+------+-------------+    +----+------+    +----+------+         +----+------+
| 501|  25.1|  34.9| 436.9|    | 501| 22.33|    | 503| 22.33|         | 501|  78,1|
| 502|  12.2|3225.9|  46.2|    | 502| 645.1|    | 505| 645.1|         | 502|  54.9| …
Run Code Online (Sandbox Code Playgroud)

hadoop-partitioning apache-spark pyspark

5
推荐指数
1
解决办法
7071
查看次数