web-dev-qa-db-ja.com

データフレームの列名の大文字と小文字を区別するが、その値の大文字と小文字を区別しない方法は?

データフレームの列名の大文字と小文字を区別するが、その値の大文字と小文字を区別しない方法は? 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
5
user1870400

これはどう:

いくつかの偽のデータ:

_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_になります。この翻訳は実行しなかったことに注意してください。

1
shakedzy

Pythonのsparkデータフレームにdf.withColumnRenamed(col_name、col_name.lower())を使用できます

0
Harshit Mehta