使用 Spark 删除 txt 文件中的特殊字符



我有一个txt文件,其中包含以下数据

3,3e,4,5   
3,5s,4#,5   
5,6,2,4  
and so on

现在我要做的是删除这些字符并使用 Spark,然后将所有值添加到聚合总和中。

如何删除特殊字符并对所有值求和。

我创建了一个数据帧并使用regexp_replace删除了特殊字符。

但是通过使用.withColumn子句,我只能一个接一个地删除特殊字符,而不是我认为不是优化代码的整体。

其次,我必须将所有值添加到一个汇总总和中。如何获取聚合值。

如果输入数据中有固定数量的列,则可以使用以下方法。

//Input Text file 
scala> val rdd = sc.textFile("/spath/stack.txt")
scala> rdd.collect()
res108: Array[String] = Array("3,3e,4,5   ", "3,5s,4#,5   ", 5,6,2,4)
//remove special characters
scala> val rdd1 = rdd.map{x => x.replaceAll("[^,0-9]", "")}
scala> rdd1.collect
res109: Array[String] = Array(3,3,4,5, 3,5,4,5, 5,6,2,4)
//Conver RDD into DataFrame
scala> val df  = rdd1.map(_.split(",")).map(x => (x(0).toInt,x(1).toInt,x(2).toInt,x(3).toInt)).toDF
scala> df.show(false)
+---+---+---+---+
|_1 |_2 |_3 |_4 |
+---+---+---+---+
|3  |3  |4  |5  |
|3  |5  |4  |5  |
|5  |6  |2  |4  |
+---+---+---+---+
//local UDF to sum up value    
scala> val sumUDF = udf((r:Row) => {
| r.getAs("_1").toString.toInt + r.getAs("_2").toString.toInt + r.getAs("_3").toString.toInt + r.getAs("_4").toString.toInt
| })

//Expected DataFrame
scala> val finaldf = df.withColumn("sumcol", sumUDF(struct(rdd2.columns map col: _*)))
scala> finaldf.show(false)
+---+---+---+---+------+
|_1 |_2 |_3 |_4 |sumcol|
+---+---+---+---+------+
|3  |3  |4  |5  |15    |
|3  |5  |4  |5  |17    |
|5  |6  |2  |4  |17    |
+---+---+---+---+------+

最新更新