2017-09-26 1 views
1

je l'dataframe suivante: (Le nom de dataframe est: df)comparer l'horodatage avec une date spécifique dans Spark et Scala

+---------------+-----------+-------------+------+----+-----+--------------------+-------------------+------+------+------+-----+--------------------+--------------------+------------------+------------------+------+ 
| time_stamp_0|sender_ip_1|receiver_ip_2| count|rank| xi|     pi|     r| ip5| ip4| ip3| ip2|   variance|    entropy| pre_chi_square| total_chi_square|attack| 
+---------------+-----------+-------------+------+----+-----+--------------------+-------------------+------+------+------+-----+--------------------+--------------------+------------------+------------------+------+ 
|07:19:00.005763| 10.0.0.2|  10.0.0.1|509286| 1|92055|1.963533260289896E-6|0.18075305427598637|111891|115199|190028|92055|1.317855896447428...|2.580232918985576E-5|3.7131630265751565|14.852652106300626|  1| 
|07:19:00.005788| 10.0.0.2|  10.0.0.1|509286| 2|92055|3.927066520579792E-6|0.18075305427598637|111891|115199|190028|92055|6.498626409377348E-6|4.888262329310028E-5|18.310392943472664|14.852652106300626|  1| 
|07:19:00.005807| 10.0.0.2|  10.0.0.1|509286| 3|92055|5.890599780869688E-6|0.18075305427598637|111891|115199|190028|92055|1.560646344288706E-5|7.093550226267817E-5| 43.9724428049685|14.852652106300626|  1| 

je dois mettre la valeur zéro pour attack champ si, à la fois la l'horodatage est plus grand que "07: 19: 00.005788" et le sender_ip_1 est égal à 10.0.0.3.

Cependant, je ne sais pas comment traiter la comparaison d'horodatage avec une donnée spécifique dans une condition dans scala. Voici mon code:

val df_attack = df 
    .withColumn("attack", 
    when($"sender_ip_1" === "10.0.0.3" 
     and ($"time_stamp_0").cast(TimestampType) > "07:19:00.005788", 0) 
     .otherwise(1)) 

Est-ce que n'importe quel corps peut m'aider?

+0

sans aucun rapport: http://wiki.c2.com/?BadVariableNames – philantrovert

+0

@philantrovert: Merci, je l'ai changé. – Queen

+0

Je ne voulais pas dire que vous deviez le changer. Je l'ai posté comme un humour léger. – philantrovert

Répondre

1

La comparaison lexicographique simple fonctionne aussi ici pour la colonne time_stamp_0.

import org.apache.spark.sql.functions._ 
import spark.implicits._ 

val final_add_count_rank_xi_pi_r_attack = Dataframe_add_rank_count_xi_pi_final_chi_square 
    .withColumn("attack", 
    when($"sender_ip_1" === "10.0.0.3" 
     && $"time_stamp_0" > "07:19:00.005788", 0) 
     .otherwise(1))