PySpark ajoute une colonne à un DataFrame à partir d'une colonne TimeStampType
J'ai un DataFrame que ressembler à quelque chose comme ça. Je veux faire fonctionner le jour de la date_time
champ.
root
|-- host: string (nullable = true)
|-- user_id: string (nullable = true)
|-- date_time: timestamp (nullable = true)
J'ai essayé d'ajouter une colonne pour extraire la journée. Pour l'instant, mes tentatives ont échoué.
df = df.withColumn("day", df.date_time.getField("day"))
org.apache.spark.sql.AnalysisException: GetField is not valid on fields of type TimestampType;
Cela a également échoué
df = df.withColumn("day", df.select("date_time").map(lambda row: row.date_time.day))
AttributeError: 'PipelinedRDD' object has no attribute 'alias'
Une idée de comment cela peut être fait?
source d'informationauteur Wai Yip Tung
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser de simples
map
:Une autre option consiste à enregistrer une fonction et d'exécuter des requêtes SQL:
Enfin, vous pouvez définir l'udf, comme ceci:
MODIFIER:
En fait, si vous utilisez SQL brut
day
fonction est déjà définie (au moins dans Spark 1.4) de sorte que vous pouvez omettre l'udf d'enregistrement. Il fournit également un certain nombre de différents date de traitement, y compris les fonctions:getters comme
année
mois
dayofmonth
date de l'arithmétique des outils comme
date_add
datediff
from_unixtime
et formateurs commedate_format
Il est également possible d'utiliser un simple date des expressions comme:
Cela signifie que vous pouvez construire relativement requêtes complexes sans la transmission des données à Python. Par exemple: