我有一个df从Hive表加载的数据帧,它有一个时间戳列,比如说ts,字符串类型为格式dd-MMM-yy hh.mm.ss.MS a(转换为python datetime库,这是%d-%b-%y %I.%M.%S.%f %p).
现在我想过滤数据帧中过去五分钟的行:
only_last_5_minutes = df.filter(
datetime.strptime(df.ts, '%d-%b-%y %I.%M.%S.%f %p') > datetime.now() - timedelta(minutes=5)
)
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,我收到此消息
TypeError: strptime() argument 1 must be string, not Column
Run Code Online (Sandbox Code Playgroud)
看起来我有错误的列操作应用程序,在我看来,我必须创建一个lambda函数来过滤满足所需条件的每一列,但特别是Python和lambda表达式的新手,我不知道如何创建我的过滤器正确.请指教.
PS我更喜欢将我的过滤器表示为Python本机(或SparkSQL)而不是Hive sql查询表达式'WHERE'中的过滤器.
首选:
df = sqlContext.sql("SELECT * FROM my_table")
df.filter( // filter here)
Run Code Online (Sandbox Code Playgroud)
不是首选的:
df = sqlContext.sql("SELECT * FROM my_table WHERE...")
Run Code Online (Sandbox Code Playgroud)