>我正在从 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]*$"))