2017-06-22 8 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文を作りたいと私は値の畏敬の念、ABCD、空自、およびXYZとテーブルDに追加された新しい行を、したいです。

答えて

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コマンドを探しています、 Scalaコマンドではありません –

+0

コードがSQLでうまくいきました。これはうまくいきます。 –

+0

これは多くのためにSQL文を探しています大きいファイル。ファイルはすでにsparkにロードされています。だから私は何かに等しいデータを設定することはできません。だから私たちは、データと呼ばれるスパーク・テーブルへの参照を持っており、それはスパーク時に誘惑的であることを指しています。だから私はSQLコマンドがほしいだけです。私は「A、B、C、SUBSTRING_INDEX(A、 '。'、1)をtempTableからDとして選択しようとしましたが、動作しませんでした。 –