如何在Spark表中创建索引?

4
我知道Spark Sql和Hive几乎相同。现在我已经创建了一张表,但是当我尝试用Spark sql查询来创建表的索引时,总是会出现以下错误:
"Error in SQL statement: AnalysisException: mismatched input '' expecting AS near ')' in create index statement"

test table

我使用的Spark SQL查询是:
CREATE INDEX word_idx ON TABLE t (id)

id的数据类型是bigint。 在此之前,我也尝试在此表的“word”列上创建表索引,但出现了相同的错误。 那么,是否有通过Spark SQL查询创建索引的方法呢?
1个回答

5
通过Spark SQL查询无法实现此功能,但是有一个名为zipWithIndexRDD函数。您可以将DataFrame转换为RDD,进行zipWithIndex操作,然后将结果RDD转换回DataFrame
请参见此社区Wiki文章以获取完整解决方案。
另一种方法是使用Spark MLLib字符串索引器

是的,我在一些RDD上使用了zipWithIndex,但对于这个RDD,我需要在特定列上创建索引,zipWithIndex不是很方便,因为我需要先分离数据,使用zipWithIndex,然后再进行连接。我想知道是否有更简单的方法。 - Cherry Wu
1
也许可以看一下 mLibStringIndexer - David Griffin
如果您不需要ID连续,可以考虑使用monotonically_increasing_id()函数。 - David Griffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接