Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 在分区Spark DataFrame中使用多列是否会降低读取速度?_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark 在分区Spark DataFrame中使用多列是否会降低读取速度?

Apache spark 在分区Spark DataFrame中使用多列是否会降低读取速度?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我想知道在Spark中编写Spark数据帧时使用多列是否会使将来的读取速度变慢? 我知道为将来的过滤使用关键列进行分区可以提高读取性能,但是如果有多个列,即使是那些不能用于过滤的列,会有什么效果呢 一个样本是: (ordersDF .write .format("parquet") .mode("overwrite") .partitionBy("CustomerId", "OrderDate", .....) # <----------- add many columns

我想知道在Spark中编写Spark数据帧时使用多列是否会使将来的读取速度变慢? 我知道为将来的过滤使用关键列进行分区可以提高读取性能,但是如果有多个列,即使是那些不能用于过滤的列,会有什么效果呢

一个样本是:

(ordersDF
  .write
  .format("parquet")
  .mode("overwrite")
  .partitionBy("CustomerId", "OrderDate", .....) # <----------- add many columns
  .save("/storage/Orders_parquet"))
(ordersDF
写
.格式(“拼花地板”)
.mode(“覆盖”)

.partitionBy(“CustomerId”、“OrderDate”和…)#是的,因为spark必须进行洗牌和短数据以进行分区

因为会有很多组合的分区键

在这个小场景中,我们需要创建1000个bucket


因此,地狱洗牌战利品,缩短>>更多时间。

这不是真的-不需要洗牌here@shay__请告诉我为什么需要洗牌..或者为什么数据帧中不会有移动..OP使用的是
df.write.partitionBy
,而您似乎与
df.repartition
@shay\uuuuuuuu混淆。此url将帮助您混合不同的内容同一问题中的问题。数据应根据未来的查询进行分区。在任何情况下,您通常不希望按基数如此高的列(如
customerId
)进行分区。最终,您的目录数将与数据集中的用户数相同。我只是发现:这会对性能产生影响。adding PartitionBy中不必要的列。使用具有有界值的列(Spark引用:为了使分区正常工作,每列中的不同值的数量通常应少于数万。)对于分区来说,具有读谓词的列是一个很好的选择,但是添加列而不在筛选中使用会影响性能。
 suppose CustomerId have unique values  10 
 suppose orderDate have unique values   10 
 suppose Orderhave unique values        10 

 Number of partition will be 10 *10*10