使用 Spark sql 和 scala 处理编码字符在 Spark 中进行数据清理



>我正在从 API 获取.csv格式的文件,其中一个地址列包含编码值,例如

(z$üíõ$F|'.h*Ë!øì=(.î;      
Þ.Í×áþ»¯Áͨ
(k$üíõ$F|'.r*Ë!øì=(.î;  
    Koæice

但是当它读出火花时,它看起来像

�����������������������������

当我们使用 Spark 2.2 时,我们可以做到这一点

.option("encoding", "UTF-8") 

但是我正在使用 spark 1.6,如果 Spark 1.6 中有任何此类选项可用,任何人都可以帮助我

吗在代码中,我喜欢

WHERE COL LIKE "^[a-zA-Z0-9]*$"

但随后输出为 0 条记录

有没有办法排除整行,如果 Spark 中的任何一列这些非字母字符串或数字。 我正在使用Scala和Spark SQL。

任何用于处理编码值的此类库或函数。

火花版本 : 1.6

多谢

类似的东西:

val data = spark.read.option("header","true").csv("data/baddata.csv")
data.show()
data.filter(s=>s.getString(1).matches("^[a-zA-Z0-9]*$")).show()

并使用 UDF:

val correctString: String => Boolean = _.matches("^[a-zA-Z0-9]*$")
import org.apache.spark.sql.functions.udf
val correctStringUDF = udf(correctString)
data.filter(correctStringUDF('data)).show()

结果:

+---+--------------------+
| id|                data|
+---+--------------------+
|  0|             correct|
|  1|(z$üíõ$F|'.h*Ë!øì...|
|  2|         Þ.Í×áþ»¯Áͨ|
|  3|(k$üíõ$F|'.r*Ë!øì...|
|  4|              Koæice|
|  5|                  ok|
|  6|            ok ok ok|
+---+--------------------+
+---+-------+
| id|   data|
+---+-------+
|  0|correct|
|  5|     ok|
+---+-------+
+---+-------+
| id|   data|
+---+-------+
|  0|correct|
|  5|     ok|
+---+-------+

您也可以使用 RDD 实现此目的

val rddData = data.select('data)
.map(_.getString(0))
.rdd
.filter(_.matches("^[a-zA-Z0-9]*$"))

最新更新