我有一些电话记录的以下数据,我想从每个记录中删除前两个值,因为它们是国家/地区代码。使用Scala,Spark或Hive可以通过什么方式进行操作?
phone
|917799423934|
|019331224595|
| 8981251522|
|917271767899|
我希望结果是:
phone
|7799423934|
|9331224595|
|8981251522|
|7271767899|
我们如何从该列的每条记录或每一行中删除前缀91,01?
最佳答案
我相信有一项改进,希望使用包含contains或等效项的列表,但是这里有:
import org.apache.spark.sql.functions._
case class Tel(telnum: String)
val ds = Seq(
Tel("917799423934"),
Tel("019331224595"),
Tel("8981251522"),
Tel("+4553")).toDS()
val ds2 = ds.withColumn("new_telnum", when(expr("substring(telnum,1,2)") === "91" || expr("substring(telnum,1,2)") === "01", expr("substring(telnum,3,length(telnum)-2)")).otherwise(col("telnum")))
ds2.show
返回:
+------------+----------+
| telnum|new_telnum|
+------------+----------+
|917799423934|7799423934|
|019331224595|9331224595|
| 8981251522|8981251522|
| +4553| +4553|
+------------+----------+
我们可能需要考虑+,但是什么也没说。