【发布时间】:2018-12-31 07:20:10
【问题描述】:
我的大数据记录格式如下:
// +---+------+------+
// |cid|itemId|bought|
// +---+------+------+
// |abc| 123| true|
// |abc| 345| true|
// |abc| 567| true|
// |def| 123| true|
// |def| 345| true|
// |def| 567| true|
// |def| 789| false|
// +---+------+------+
cid 和 itemId 是字符串。
有 965,964,223 条记录。
我正在尝试使用StringIndexer 将cid 转换为整数,如下所示:
dataset.repartition(50)
val cidIndexer = new StringIndexer().setInputCol("cid").setOutputCol("cidIndex")
val cidIndexedMatrix = cidIndexer.fit(dataset).transform(dataset)
但是这些代码行非常慢(大约需要 30 分钟)。问题是它太大了,在那之后我什么也做不了。
我正在使用具有 2 个节点(61 GB 内存)的 R4 2XLarge 集群的 amazon EMR 集群。
我可以进一步提高性能吗?任何帮助将不胜感激。
【问题讨论】:
-
您使用的是哪个版本的 Spark?
-
我也有同样的问题。就我而言,它只有 100,000,000 行 x 150 列。在总共 256 个内核和 1,024GB 内存的 4 个节点上,它甚至在 15 分钟后都无法完成一项任务。背景:我的字符串列并不完全是唯一的,但和它一样好。此外,它相当长,平均约 40 个字符。有没有更好的方法来添加索引列?我尝试使用
zipWithIndex创建一个查找表,但也不能很好地扩展。 -
我已经尝试过使用此处描述的 zipWithIndex blogs.msdn.microsoft.com/azuredatalake/2016/06/09/… 的替代解决方案。 IE。创建 ID 查找表并加入。这也不能很好地扩展,因为查找表对于广播连接来说太大了。
-
看起来是一个很老的问题,它可能与这个错误报告有关issues.apache.org/jira/browse/SPARK-20392你当前的 spark 版本是什么?
-
我使用的是 Spark 2.4.3,所以这应该不是问题
标签: apache-spark apache-spark-ml apache-spark-dataset