如何在没有公共密钥的情况下合并 Apache Spark 中的两个数据帧?
Posted
技术标签:
【中文标题】如何在没有公共密钥的情况下合并 Apache Spark 中的两个数据帧?【英文标题】:How to merge two dataframes in Apache Spark without common key? 【发布时间】:2016-10-05 14:21:04 【问题描述】:我正在尝试加入两个数据框。
数据:DataFrame[_1: bigint, _2: vector]
集群:DataFrame[集群:bigint]
result = data.join(broadcast(cluster))
奇怪的是,所有的执行者都在加入步骤中失败了。
我不知道我能做什么。
HDFS 上的数据文件为 2.8 GB,集群数据仅为 5 MB。 使用 Parquet 读取文件。
【问题讨论】:
你能发布你得到的确切错误吗? 确切的错误是执行器失败了。找不到明确的。我现在知道答案了:) 【参考方案1】:这是什么工作:
data = sqlContext.read.parquet(data_path)
data = data.withColumn("id", monotonicallyIncreasingId())
cluster = sqlContext.read.parquet(cluster_path)
cluster = cluster.withColumn("id", monotonicallyIncreasingId())
result = data.join(cluster, on="id")
将集群DataFrame直接添加到数据DataFrame中:
data.withColumn("cluster", cluster.cluster)
不起作用。
data.join(cluster)
同样不起作用,执行程序在有足够内存的情况下失败。
不知道为什么它不起作用......
【讨论】:
以上是关于如何在没有公共密钥的情况下合并 Apache Spark 中的两个数据帧?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 ArrayIndexOutOfBoundsException 的情况下通过 executeBatch 获取生成的密钥?