Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 如何在具有数组类型列的值中添加索引_Scala_Apache Spark_Parquet - Fatal编程技术网

Scala 如何在具有数组类型列的值中添加索引

Scala 如何在具有数组类型列的值中添加索引,scala,apache-spark,parquet,Scala,Apache Spark,Parquet,我需要向列数组中添加序列号 我的源数据是拼花格式的,数量接近20亿条记录。 在这里,我只能从拼花地板中选择键和代码列,并将序号添加到ref_代码中,然后将其加载回S3 Key_1 Key_2 Key_3 Ref_codes 112240386 7435038894 2 [4659,53540,78907] 113325994 7940375640 1 [7232,7840,83969] 223352476 7765270324 4

我需要向列数组中添加序列号 我的源数据是拼花格式的,数量接近20亿条记录。 在这里,我只能从拼花地板中选择键和代码列,并将序号添加到ref_代码中,然后将其加载回S3

Key_1       Key_2       Key_3  Ref_codes
112240386   7435038894  2    [4659,53540,78907]
113325994   7940375640  1      [7232,7840,83969]
223352476   7765270324  4      [9999]
345936074   7950076012  1      [78650,4829,30000]
            
            
Key_1       Key_2       Key_3   Ref_codes
112240386   7435038894  2       [(4659,0),(53540,1),(78907,2)]
113325994   7940375640  1       [(7232,0),(7840,1),(83969,2)]
223352476   7765270324  4       [(9999,0)]
345936074   7950076012  1       [(78650,0),(4829,1),(30000,2)]

我是Scala新手,我尝试了多个选项,但没有得到正确的结果。非常感谢您的帮助…

您可以在最新版本的spark中使用更高阶的函数,如transform,如下所示。 数据:

火花3.0.0+

火花>2.4

火花<2.4

输出:

+---------+----------+-----+----------------------------------+
|key_1    |key_2     |key_3|ref_code                          |
+---------+----------+-----+----------------------------------+
|112240386|7435038894|2    |[[4659, 0], [53540, 1], [7890, 2]]|
|113325994|7940375640|1    |[[7232, 0], [7840, 1], [8396, 2]] |
|223352476|7765270324|4    |[[999, 0]]                        |
|345936074|7950076012|1    |[[78650, 0], [4829, 1], [3000, 2]]|
+---------+----------+-----+----------------------------------+

有关转换的更多示例是

您可以在最新版本的spark中使用更高阶的函数,如转换,如下所示。 数据:

火花3.0.0+

火花>2.4

火花<2.4

输出:

+---------+----------+-----+----------------------------------+
|key_1    |key_2     |key_3|ref_code                          |
+---------+----------+-----+----------------------------------+
|112240386|7435038894|2    |[[4659, 0], [53540, 1], [7890, 2]]|
|113325994|7940375640|1    |[[7232, 0], [7840, 1], [8396, 2]] |
|223352476|7765270324|4    |[[999, 0]]                        |
|345936074|7950076012|1    |[[78650, 0], [4829, 1], [3000, 2]]|
+---------+----------+-----+----------------------------------+

更多关于变换的例子是Hi Koiralo,它工作得很好。。非常感谢您的解决方案是的,它工作得很好。。我甚至尝试了更大的音量,效果很好。嗨,Koiralo,效果很好。。非常感谢您的解决方案是的,它工作得很好。。我甚至尝试了更大的音量,效果很好。
df.withColumn("ref_code", expr("transform(ref_code, (x,i) -> (x,i) )"))
val addIndex = udf((arr: Seq[Int]) => arr.zipWithIndex)
df.withColumn("ref_code", addIndex($"ref_code")).show(false)
+---------+----------+-----+----------------------------------+
|key_1    |key_2     |key_3|ref_code                          |
+---------+----------+-----+----------------------------------+
|112240386|7435038894|2    |[[4659, 0], [53540, 1], [7890, 2]]|
|113325994|7940375640|1    |[[7232, 0], [7840, 1], [8396, 2]] |
|223352476|7765270324|4    |[[999, 0]]                        |
|345936074|7950076012|1    |[[78650, 0], [4829, 1], [3000, 2]]|
+---------+----------+-----+----------------------------------+