2017-06-22 368 views
0

我有一个包含多行的文件。例如在SparkSQL中分割一个字符串

A    B  C  
awer.ttp.net Code 554 
abcd.ttp.net Code 747 
asdf.ttp.net Part 554 
xyz.ttp.net  Part 747 

我想打一个SparkSQL语句,分割只是列的表,我想一个新行添加到表d,其值敬畏,ABCD,航空自卫队和XYZ。

回答

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

我要寻找一个SparkSQL命令,不是斯卡拉命令 –

+0

用SQL更新了代码,希望这能起作用 –

+0

我正在寻找一个SQL语句,因为这是一个很大的更大的文件。该文件已被加载到spark中。所以我不能将数据设置为等于某件事。所以我们引用了一个名为data的spark表,并且它指向spark中的temptable。所以我只想要SQL命令。我尝试了“SELECT A,B,C,SUBSTRING_INDEX(A,'。',1)作为tempTable的D”但这并不起作用 –