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。
我有一个包含多行的文件。例如在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。
可以使用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 |
+------------+----+---+----+
我要寻找一个SparkSQL命令,不是斯卡拉命令 –
用SQL更新了代码,希望这能起作用 –
我正在寻找一个SQL语句,因为这是一个很大的更大的文件。该文件已被加载到spark中。所以我不能将数据设置为等于某件事。所以我们引用了一个名为data的spark表,并且它指向spark中的temptable。所以我只想要SQL命令。我尝试了“SELECT A,B,C,SUBSTRING_INDEX(A,'。',1)作为tempTable的D”但这并不起作用 –