次のコード ブロックのうち、タイムスタンプ型の列日付を持つ新しい 1 列 2 行の DataFrame dfDates を作成するものはどれですか?
正解: C
説明
この質問は難しいです。ここで知っておくべき重要な点が 2 つあります。
まず、createDataFrame の構文です。ここでは、[(1,), (2,)] のようなタプルのリストが必要です。Python でタプルを定義するには、その中に項目が 1 つしかない場合、Python がそれを単なる通常のかっこではなくタプルとして解釈できるように、項目の後にカンマを置くことが重要です。
次に、to_timestamp 構文を理解する必要があります。詳細については、以下のリンク先のドキュメントを参照してください。
適切な対策として、間違ったオプションが間違っている理由を詳しく調べてみましょう。
dfDates = dark.createDataFrame([("23/01/2022 11:28:12",),("24/01/2022 10:58:34",)], ["date"]) このコード スニペットは次のことを行います。日付列のデータ型がタイムスタンプではなく文字列であることを除いて、質問で求められるものはすべて含まれています。スキーマが指定されていない場合、Spark は文字列データ型をデフォルトとして設定します。
dfDates = スパーク.createDataFrame(["23/01/2022 11:28:12","24/01/2022 10:58:34"], ["日付"]) dfDates = dfDates.withColumn("日付", to_timestamp("dd/MM/yyyy HH:mm:ss", "date")) このコマンドの最初の行で、Spark は次のエラーをスローします: TypeError: タイプのスキーマを推論できません:
<クラス 'str'>。これは、Spark が行情報の検索を期待しているのではなく、文字列を検索するためです。データをタプルとして指定する必要があるのはこのためです。幸いなことに、Spark ドキュメント (以下にリンク) には、正しい軌道に乗るのに役立つ DataFrame の作成例が多数示されています。
dfDates = スパーク.createDataFrame([("23/01/2022 11:28:12",),("24/01/2022 10:58:34",)], ["日付"]) dfDates = dfDates。 withColumnRenamed("date", to_timestamp("date", "yyyy-MM-dd HH:mm:ss")) この回答の問題は、演算子 withColumnRenamed が使用されていることです。この演算子は単に列の名前を変更するだけですが、実際の内容を変更する権限はありません。このため、代わりに withColumn を使用する必要があります。さらに、日付形式 yyyy-MM-dd HH:mm:ss は、実際のタイムスタンプの形式「23/01/2022 11:28:12」を反映しません。
dfDates = スパーク.createDataFrame(["23/01/2022 11:28:12","24/01/2022 10:58:34"], ["日付"]) dfDates = dfDates.withColumnRenamed("日付", to_datetime("date", "yyyy-MM-dd HH:mm:ss")) ここでは、withColumn の代わりに withColumnRenamed が使用されます (上記を参照)。さらに、行は正しく表現されていません。括弧を使用してタプルとして記述する必要があります。最後に、ここでは日付形式さえオフになっています (上記を参照)。
詳細: pyspark.sql.functions.to_timestamp - PySpark 3.1.2 ドキュメントおよび pyspark.sql.SparkSession.createDataFrame - PySpark 3.1.1 ドキュメント 静的ノートブック | 動的ノートブック: テスト 2 を参照