SparkSQLでデータフレーム列の名前を変更する3つの方法

プロジェクトのgithubアドレス:bitcarmanlee easy-algorithm-interview-and-practice
誰もがスターを付け、メッセージを残し、一緒に学び、進歩することを歓迎します

1.データフレームのデフォルトの列名

spark sqlがテキストを読み取ってデータフレームを生成するとき、テキストに独自のスキーマ情報がない場合、この形式のデフォルトの列名は_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

上記のcsvテキストを読んでからデータフレームを生成すると、スキーマ情報は次のようになります。

  @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()
  }

最終的な出力は

root
 |-- _c0: string (nullable = true)
 |-- _c1: string (nullable = true)

テキストのデフォルトの2列は、_c0、_c1です。

2.withColumnRenamedで名前を変更します

実際の開発プロセスでは、通常、各列に名前を付けます。これにより、その後の開発が容易になります。メソッドの1つは、withColumnsメソッドを使用できます。

    val df = spark.read
      .option("header", "false")
      .option("sep", "\t")
      .csv(path)
      .withColumnRenamed("_c0", "appid")
      .withColumnRenamed("_c1", "brand")

    df.printSchema()

withColumnsメソッドは、一度に1つの列の名前を変更します。列が多い場合は、明らかに特に便利ではありません。現時点では、後者のメソッドを使用できます。

3.toDFメソッド

    val df1 = spark.read
      .option("header", "false")
      .option("sep", "\t")
      .csv(path)
      .toDF("appid", "brand")

名前の変更を目的として、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をパラメータシーケンスとして扱うことができることです。

おすすめ

転載: blog.csdn.net/bitcarmanlee/article/details/109280739