在SparkSQL中拆分字符串

时间:2017-06-22 00:20:45

标签: 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

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

2 个答案:

答案 0 :(得分:0)

您可以使用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")

输出:

+------------+----+---+----+
|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 |
+------------+----+---+----+

答案 1 :(得分:0)

你可以在 SparkSQL 中做类似下面的事情

select A,B,C, split(A,'\\.')[0] as D from tablename; 
相关问题