我必须在pyspark(spark2.0)的大数据帧中对列进行编码。所有的值几乎都是唯一的(大约1000mln值)。 最好的选择可能是StringIndexer,但由于某些原因,它总是失败并终止我的spark会话。 我能不能写一个这样的函数:
id_dict() = dict()
def indexer(x):
id_dict.setdefault(x, len(id_dict))
return id_dict[x]
并将其映射到id为_dict saving the items()的DataFrame?这句话会在每个遗嘱执行人身上同步吗? 我需要所有这些来预处理元组('x',3,5)的火花.mllibALS模型。 谢谢您。在
StringIndexer
将所有标签保存在内存中,因此,如果值几乎是唯一的,则不会缩放。在您可以获取唯一值、排序和添加id,这很昂贵,但在这种情况下更可靠:
请注意,标签不是连续的,可能会因运行而不同,或者在
^{pr2}$spark.sql.shuffle.partitions
发生变化时发生变化。如果不可接受,则必须使用RDDs
:相关问题 更多 >
编程相关推荐