sprk sql修改欄位名有以下方法:1.dataframe預設的列名
spark sql去讀取文字生成dataframe時,如果該文字沒有自帶schema資訊,預設的列名為_c0, _c1這種形式,我們可以看個例子。
資料如下
101 brand1
101 brand2
101 brand3
102 brand1
102 brand3
102 brand4
103 brand2
103 brand5
1
2
3
4
5
6
7
8
9
10
11
12
如果我們讀取上述的csv文字然後生成dataframe, schema資訊如下
@Test
def parse2() = {
val sparkConf = new SparkConf().setMaster("local[2]")
sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
val spark = SparkSession.builder().config(sparkConf).getOrCreate()
val path = "xxx"
val df = spark.read
.option("header", "false")
.option("sep", "\t")
.csv(path)
df.printSchema()
}
13
14
15
最後輸出為
root
|-- _c0: string (nullable = true)
|-- _c1: string (nullable = true)
文字預設兩列的列名即為_c0, _c1。
2.用withColumnRenamed重新命名
實際開發過程中,我們一般會給各列一個名字,這樣能方便我們後續開發。其中方法之一就可以使用withColumns方法。
.withColumnRenamed("_c0", "appid")
.withColumnRenamed("_c1", "brand")
withColumns方法每次重新命名一列,當列比較多的時候,顯然不是特別方便,此時可以使用後面的方法。
3.toDF方法
val df1 = spark.read
.toDF("appid", "brand")
toDF後面直接跟列名,就可以達到重新命名的目的。
toDF還有另外一種使用方法
val names = Seq("appid", "brand")
.toDF(names: _*)
其中,_*作為一個整體,告訴編譯器你希望將某個引數當作引數序列處理。toDF的方法簽名為def toDF(colNames: String*),引數為可變長度的字串序列,剛好names: _*就可以將seq當成一個引數序列來處理。
sprk sql修改欄位名有以下方法:1.dataframe預設的列名
spark sql去讀取文字生成dataframe時,如果該文字沒有自帶schema資訊,預設的列名為_c0, _c1這種形式,我們可以看個例子。
資料如下
101 brand1
101 brand2
101 brand3
102 brand1
102 brand3
102 brand3
102 brand4
103 brand2
103 brand2
103 brand2
103 brand5
103 brand5
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
如果我們讀取上述的csv文字然後生成dataframe, schema資訊如下
@Test
def parse2() = {
val sparkConf = new SparkConf().setMaster("local[2]")
sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
val spark = SparkSession.builder().config(sparkConf).getOrCreate()
val path = "xxx"
val df = spark.read
.option("header", "false")
.option("sep", "\t")
.csv(path)
df.printSchema()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
最後輸出為
root
|-- _c0: string (nullable = true)
|-- _c1: string (nullable = true)
1
2
3
1
2
3
文字預設兩列的列名即為_c0, _c1。
2.用withColumnRenamed重新命名
實際開發過程中,我們一般會給各列一個名字,這樣能方便我們後續開發。其中方法之一就可以使用withColumns方法。
val df = spark.read
.option("header", "false")
.option("sep", "\t")
.csv(path)
.withColumnRenamed("_c0", "appid")
.withColumnRenamed("_c1", "brand")
df.printSchema()
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
withColumns方法每次重新命名一列,當列比較多的時候,顯然不是特別方便,此時可以使用後面的方法。
3.toDF方法
val df1 = spark.read
.option("header", "false")
.option("sep", "\t")
.csv(path)
.toDF("appid", "brand")
1
2
3
4
5
1
2
3
4
5
toDF後面直接跟列名,就可以達到重新命名的目的。
toDF還有另外一種使用方法
val names = Seq("appid", "brand")
val df = spark.read
.option("header", "false")
.option("sep", "\t")
.csv(path)
.toDF(names: _*)
df.printSchema()
其中,_*作為一個整體,告訴編譯器你希望將某個引數當作引數序列處理。toDF的方法簽名為def toDF(colNames: String*),引數為可變長度的字串序列,剛好names: _*就可以將seq當成一個引數序列來處理。