データフレームの列名の大文字と小文字を区別するが、その値の大文字と小文字を区別しない方法は? RAWを使用するSpark SQLおよびDataframeメソッド?
入力データフレーム(これらの列が何百も大文字であると想像してください)
NAME | COUNTRY | SRC | CITY | DEBIT
---------------------------------------------
"foo"| "NZ" | salary | "Auckland" | 15.0
"bar"| "Aus" | investment | "Melbourne"| 12.5
タゲットデータフレーム
name | country | src | city | debit
------------------------------------------------
"foo"| "NZ" | salary | "Auckland" | 15.0
"bar"| "Aus" | investment | "Melbourne"| 12.5
これはどう:
いくつかの偽のデータ:
_scala> val df = spark.sql("select 'A' as AA, 'B' as BB")
df: org.Apache.spark.sql.DataFrame = [AA: string, BB: string]
scala> df.show()
+---+---+
| AA| BB|
+---+---+
| A| B|
+---+---+
_
次に、すべての列を新しい名前で再選択します。これは小文字バージョンです。
_scala> val cols = df.columns.map(c => s"$c as ${c.toLowerCase}")
cols: Array[String] = Array(AA as aa, BB as bb)
scala> val lowerDf = df.selectExpr(cols:_*)
lowerDf: org.Apache.spark.sql.DataFrame = [aa: string, bb: string]
scala> lowerDf.show()
+---+---+
| aa| bb|
+---+---+
| A| B|
+---+---+
_
注:私はScalaを使用しています。 PySparkを使用していて、Scala構文に慣れていない場合、df.columns.map(c => s"$c as ${c.toLowerCase}")
はmap(lambda c: c.lower(), df.columns)
in Python and _cols:_*
_は_*cols
_になります。この翻訳は実行しなかったことに注意してください。
Pythonのsparkデータフレームにdf.withColumnRenamed(col_name、col_name.lower())を使用できます