在 SparkSQL 中分割字符串

Ada*_*ith 1 sql apache-spark-sql

我有一个包含几行的文件。例如

A               B       C    
awer.ttp.net    Code    554
abcd.ttp.net    Code    747
asdf.ttp.net    Part    554
xyz.ttp.net     Part    747
Run Code Online (Sandbox Code Playgroud)

我想要创建一个 SparkSQL 语句来仅拆分表的 a 列,并且希望向表 D 添加一个新行,其值为 awe、abcd、asdf 和 xyz。

Sha*_*ala 6

您可以使用split函数并获取新列的第一个元素D

这是一个简单的例子

val spark = SparkSession.builder().master("local").getOrCreate()
import spark.implicits._
val data = spark.sparkContext.parallelize(Seq(
  ("awer.ttp.net","Code", 554),
  ("abcd.ttp.net","Code", 747),
  ("asdf.ttp.net","Part", 554),
  ("xyz.ttp.net","Part", 747)
)).toDF("A","B","C")

data.withColumn("D", split($"A", "\\.")(0)).show(false)

 //using SQL 

data.createOrReplaceTempView("tempTable")
data.sqlContext.sql("SELECT A, B, C, SUBSTRING_INDEX(A, '.', 1) as D  from tempTable")
Run Code Online (Sandbox Code Playgroud)

输出:

+------------+----+---+----+
|A           |B   |C  |D   |
+------------+----+---+----+
|awer.ttp.net|Code|554|awer|
|abcd.ttp.net|Code|747|abcd|
|asdf.ttp.net|Part|554|asdf|
|xyz.ttp.net |Part|747|xyz |
+------------+----+---+----+
Run Code Online (Sandbox Code Playgroud)