欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

sql修改字段名

阮建安2年前143瀏覽0評論

sql修改字段名?

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當成一個參數序列來處理。