pyspark获得一周的周数

时间:2017-07-26 19:45:48

标签: sql hadoop apache-spark pyspark

我很难从datafrme专栏获得pyspark中的月份,因为例子将我的数据框视为

    2017.07.25 18:54:32 WARN  [Jetty-QTP-AdminConsole-98]: org.jivesoftware.admin.LoginLimitManager - Failed admin console login attempt by <myuserid> from <myIP>
    2017.07.25 18:54:33 INFO  [Server SR - 881162561]: org.jivesoftware.openfire.net.SocketReadingMode - STARTTLS negotiation (with: org.jivesoftware.openfire.net.SocketConnection@1248cf94 socket: Socket[addr=/78.46.93.108,port=57984,localport=5269] session: org.jivesoftware.openfire.session.LocalIncomingServerSession@2843cab status: 1 address: <xyz>.com/5c3gn5yu6p id: 5c3gn5yu6p) failed.
    javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
            at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1431)
            at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)
            at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:813)
            at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
            at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
            at org.jivesoftware.openfire.net.TLSStreamHandler.doHandshake(TLSStreamHandler.jav a:241)
            at org.jivesoftware.openfire.net.TLSStreamHandler.start(TLSStreamHandler.java:178)
            at org.jivesoftware.openfire.net.SocketConnection.startTLS(SocketConnection.java:1 95)
            at org.jivesoftware.openfire.net.SocketReadingMode.negotiateTLS(SocketReadingMode. java:87)
            at org.jivesoftware.openfire.net.BlockingReadingMode.readStream(BlockingReadingMod e.java:138)
            at org.jivesoftware.openfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 76)
            at org.jivesoftware.openfire.net.SocketReader.run(SocketReader.java:145)
            at java.lang.Thread.run(Thread.java:745)
    Caused by: javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
            at sun.security.ssl.DHCrypt.checkConstraints(DHCrypt.java:237)
            at sun.security.ssl.ServerHandshaker.clientKeyExchange(ServerHandshaker.java:1599)
            at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:269)
            at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
            at sun.security.ssl.Handshaker$1.run(Handshaker.java:919)
            at sun.security.ssl.Handshaker$1.run(Handshaker.java:916)
            at java.security.AccessController.doPrivileged(Native Method)
            at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1369)
            at org.jivesoftware.openfire.net.TLSStreamHandler.doTasks(TLSStreamHandler.java:34 4)
            at org.jivesoftware.openfire.net.TLSStreamHandler.doHandshake(TLSStreamHandler.jav a:254)
            ... 7 more













    2017.07.25 18:54:36 INFO  [Server SR - 1692736043]: org.jivesoftware.openfire.net.SocketReadingMode - STARTTLS negotiation (with: org.jivesoftware.openfire.net.SocketConnection@7b80ac6e socket: Socket[addr=/136.243.42.223,port=47704,localport=5269] session: org.jivesoftware.openfire.session.LocalIncomingServerSession@330ab9e3 status: 1 address: <xyz>.com/5rljrbkums id: 5rljrbkums) failed.
    javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
            at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1431)
            at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)
            at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:813)
            at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
            at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
            at org.jivesoftware.openfire.net.TLSStreamHandler.doHandshake(TLSStreamHandler.jav a:241)
            at org.jivesoftware.openfire.net.TLSStreamHandler.start(TLSStreamHandler.java:178)
            at org.jivesoftware.openfire.net.SocketConnection.startTLS(SocketConnection.java:1 95)
            at org.jivesoftware.openfire.net.SocketReadingMode.negotiateTLS(SocketReadingMode. java:87)
            at org.jivesoftware.openfire.net.BlockingReadingMode.readStream(BlockingReadingMod e.java:138)
            at org.jivesoftware.openfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 76)
            at org.jivesoftware.openfire.net.SocketReader.run(SocketReader.java:145)
            at java.lang.Thread.run(Thread.java:745)
    Caused by: javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
            at sun.security.ssl.DHCrypt.checkConstraints(DHCrypt.java:237)
            at sun.security.ssl.ServerHandshaker.clientKeyExchange(ServerHandshaker.java:1599)
            at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:269)
            at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
            at sun.security.ssl.Handshaker$1.run(Handshaker.java:919)
            at sun.security.ssl.Handshaker$1.run(Handshaker.java:916)
            at java.security.AccessController.doPrivileged(Native Method)
            at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1369)
            at org.jivesoftware.openfire.net.TLSStreamHandler.doTasks(TLSStreamHandler.java:34 4)
            at org.jivesoftware.openfire.net.TLSStreamHandler.doHandshake(TLSStreamHandler.jav a:254)
            ... 7 more





    2017.07.25 19:03:00 ERROR [Jetty-QTP-AdminConsole-56]: org.jivesoftware.openfire.ldap.LdapAuthProvider - Error connecting to LDAP server
    javax.naming.CommunicationException: <myLDAP>:636 [Root exception is javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints]
            at com.sun.jndi.ldap.Connection.<init>(Connection.java:226)
            at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:137)
            at com.sun.jndi.ldap.LdapClientFactory.createPooledConnection(LdapClientFactory.ja va:64)
            at com.sun.jndi.ldap.pool.Connections.<init>(Connections.java:115)
            at com.sun.jndi.ldap.pool.Pool.getPooledConnection(Pool.java:132)
            at com.sun.jndi.ldap.LdapPoolManager.getLdapClient(LdapPoolManager.java:329)
            at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1606)
            at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2746)
            at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:319)
            at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192)
            at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210)
            at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153)
            at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)
            at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
            at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
            at javax.naming.InitialContext.init(InitialContext.java:244)
            at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:154)
            at org.jivesoftware.util.JiveInitialLdapContext.<init>(JiveInitialLdapContext.java :43)
            at org.jivesoftware.openfire.ldap.LdapManager.getContext(LdapManager.java:568)
            at org.jivesoftware.openfire.ldap.LdapManager.findUserDN(LdapManager.java:975)
            at org.jivesoftware.openfire.ldap.LdapManager.findUserDN(LdapManager.java:928)
            at org.jivesoftware.openfire.ldap.LdapAuthProvider.authenticate(LdapAuthProvider.j ava:126)
            at org.jivesoftware.openfire.auth.AuthFactory.authenticate(AuthFactory.java:217)
            at org.jivesoftware.openfire.admin.login_jsp._jspService(login_jsp.java:175)
            at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
            at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
            at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1669)
            at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39)
            at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1652)
            at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:76)
            at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1652)
            at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingF ilter.java:53)
            at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1652)
            at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:80)
            at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1652)
            at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:162)
            at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1652)
            at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
            at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
            at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
            at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:22 3)
            at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:11 27)
            at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
            at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185 )
            at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:106 1)
            at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
            at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandler Collection.java:215)
            at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.jav a:110)
            at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
            at org.eclipse.jetty.server.Server.handle(Server.java:499)
            at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
            at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
            at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
            at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635 )
            at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
            at java.lang.Thread.run(Thread.java:745)
    Caused by: javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
            at sun.security.ssl.DHCrypt.checkConstraints(DHCrypt.java:237)
            at sun.security.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:712)
            at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:268)
            at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
            at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
            at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
            at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
            at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
            at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
            at com.sun.jndi.ldap.Connection.createSocket(Connection.java:376)
            at com.sun.jndi.ldap.Connection.<init>(Connection.java:203)
            ... 56 more

我的输出应该如下

WeekID,DateField,WeekNUM
1,01/JAN/2017
2,15/Feb/2017

我尝试使用striftime和其他日期函数我无法做到。

请帮我解决问题。

2 个答案:

答案 0 :(得分:2)

您可以合并to_datedate_format

from pyspark.sql.functions import to_date, date_format

df = spark.createDataFrame(
    [(1, "01/JAN/2017"), (2, "15/FEB/2017")], ("id", "date"))

df.withColumn("week", date_format(to_date("date", "dd/MMM/yyyy"), "W")).show()
+---+-----------+----+
| id|       date|week|
+---+-----------+----+
|  1|01/JAN/2017|   1|
|  2|15/FEB/2017|   3|
+---+-----------+----+

如果您想要一周中的一周,请将格式替换为w

date_format(to_date("date", "dd/MMM/yyyy"), "w")

答案 1 :(得分:1)

由于 spark 3.0 标志 w 已被弃用。 所以,你可以简单地使用 PySpark 内置函数 weekofyear 如下 -

import pyspark.sql.functions as funcs

(df
 .withColumn(
    'week_of_year', 
    funcs.weekofyear(funcs.col('date_announced'))).select('date_announced', 'week_of_year')
).show(5)

+-------------------+------------+
|     date_announced|week_of_year|
+-------------------+------------+
|2020-01-30 00:00:00|           5|
|2020-02-02 00:00:00|           5|
|2020-02-03 00:00:00|           6|
|2020-03-02 00:00:00|          10|
|2020-03-02 00:00:00|          10|
+-------------------+------------+