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
Scala 使用spark数据帧进行广播哈希连接_Scala_Apache Spark_Spark Dataframe - Fatal编程技术网

Scala 使用spark数据帧进行广播哈希连接

Scala 使用spark数据帧进行广播哈希连接,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,我正在尝试在spark 1.6.0中加入广播哈希,但未能成功。 下面是一个例子: val DF1 = sqlContext.read.parquet("path1") val DF2 = sqlContext.read.parquet("path2") val Join = DF1.as("tc").join(broadcast(DF2.as("st")), Seq("col1"), "left_outer") 即使我使用广播提示,DF上的解释也显示SortMergeOuterJoin。

我正在尝试在spark 1.6.0中加入广播哈希,但未能成功。 下面是一个例子:

val DF1 = sqlContext.read.parquet("path1")

val DF2 = sqlContext.read.parquet("path2")


val Join = DF1.as("tc").join(broadcast(DF2.as("st")), Seq("col1"), "left_outer")
即使我使用广播提示,DF上的解释也显示SortMergeOuterJoin。我认为其中一个原因是DF2大于20MB,默认情况下属性spark.sql.autoBroadcastJoinThreshold为10MB,但我无法在spark shell中更改此变量的属性。我做错什么了吗

我试了如下

spark.sql.autoBroadcastJoinThreshold=100MB

scala> spark.sql.autoBroadcastJoinThreshold=100MB
<console>:1: error: Invalid literal number
       spark.sql.autoBroadcastJoinThreshold=100MB
scala>spark.sql.autoBroadcastJoinThreshold=100MB
:1:错误:无效的文字编号
spark.sql.autoBroadcastJoinThreshold=100MB

我需要设置此属性并尝试是否可以进行广播哈希连接,这是否会提高性能。我检查了stackoverflow上的许多线程,但未能成功。这里有人能帮我吗

试着做以下事情:

编辑:这是Scala代码,Python代码在下面

scala> spark.conf.get("spark.sql.autoBroadcastJoinThreshold")
res1: String = 10485760

scala> spark.conf.set("spark.sql.autoBroadcastJoinThreshold", "20971520")

scala> spark.conf.get("spark.sql.autoBroadcastJoinThreshold")
res3: String = 20971520
Python代码: 如果我的记忆很好,每当你传递SparkConf对象时,它就会被克隆,因此你不能在上下文中更改它,但可以在会话中更改它

首先,我检查阈值的当前大小,实际上它是10MB

>>> spark.conf.get('spark.sql.autoBroadcastJoinThreshold')
u'10485760'
现在我创建了一个新的会话,不用担心数据帧(是的……Dataset[Row]),您可以有多个会话

spark_new = SparkSession.builder.config("spark.sql.autoBroadcastJoinThreshold","20971520").getOrCreate()
然后我确认设置了新的配置值

>>> spark_new.conf.get('spark.sql.autoBroadcastJoinThreshold')
u'20971520'
给你,双倍的尺寸


注意:我在Python上工作,但只需在一些语法差异中添加一个val,就可以了。希望它能帮助或引导您朝正确的方向前进

感谢xmorera的快速回复,但为什么我在spark shell中尝试相同命令时无法检查默认值。scala>spark.conf.get('spark.sql.autoBroadcastJoinThreshold'):1:错误:未关闭的字符文本spark.conf.get('spark.sql.autoBroadcastJoinThreshold')我添加了Python代码,因为前面有pyspark,不想关闭会话。现在我关闭它,打开火花壳并进行测试。我认为并希望我的编辑能对你有所帮助。这个答案是正确的@yuvrajrajpurohit如果答案对你有帮助,请接受。它也将是指向其他用户的指针。谢谢@RamGhadiyaram-我无法接受,因为这样做声誉点必须大于15,如果不是这样,请让我知道。要接受答案,你不需要投票超过15,你需要投票超过15