大家好我正在研究PySpark Python,我已经提到了代码并遇到了一些问题,我想知道是否有人知道以下问题?
windowSpec = Window.partitionBy(df_Broadcast['id']).orderBy(df_Broadcast['id'])
windowSpec
IdShift = lag(df_Broadcast["id"]).over(windowSpec).alias('IdShift')
df_Broadcast = df_Broadcast.withColumn('CheckId', df_Broadcast[idI'] != IdShift)
df_Broadcast.show()
Run Code Online (Sandbox Code Playgroud)
这是我的一段代码,它将返回bool值为true false,当我第一次运行此代码时,它工作正常,但重新启动内核后,这就是我得到的错误.
---------------------------------------------------------------------------
Py4JJavaError Traceback (most recent call last)
<ipython-input-11-2d28913c9e2c> in <module>()
----> 1 df_Broadcast.show()
~/anaconda3/lib/python3.6/site-packages/pyspark/sql/dataframe.py in show(self, n, truncate)
334 """
335 if isinstance(truncate, bool) and truncate:
--> 336 print(self._jdf.showString(n, 20))
337 else:
338 print(self._jdf.showString(n, int(truncate)))
~/anaconda3/lib/python3.6/site-packages/py4j/java_gateway.py in __call__(self, *args)
1131 answer = self.gateway_client.send_command(command)
1132 return_value = get_return_value(
-> 1133 answer, self.gateway_client, self.target_id, self.name)
1134
1135 for temp_arg in temp_args:
~/anaconda3/lib/python3.6/site-packages/pyspark/sql/utils.py in deco(*a, …Run Code Online (Sandbox Code Playgroud) dfdata.Speed.rolling('60T', closed='right').sum()
Run Code Online (Sandbox Code Playgroud)
我试图在这一列上应用滚动总和,并整理出整个数据,但仍然遇到相同的错误。谁能帮我解决一下??数据中索引列的第一个日期和时间列,第二个是普通列。这就是为什么它看起来有点重复。
DateTime DateTime Speed distance IDs totalHours
2011-01-01 00:19:00 2011-01-01 00:19:00 0.041916 0.000710 19 0.016944
2011-01-01 00:20:00 2011-01-01 00:20:00 0.033719 0.000562 19 0.016667
2011-01-01 00:20:59 2011-01-01 00:20:59 0.153553 0.002517 19 0.016389
2011-01-01 00:21:59 2011-01-01 00:21:59 0.142272 0.002371 19 0.016667
2011-01-01 00:23:00 2011-01-01 00:23:00 0.033166 0.000562 19 0.016944
2011-01-01 00:24:00 2011-01-01 00:24:00 0.037843 0.000631 19 0.016667
2011-01-01 00:26:00 2011-01-01 00:26:00 0.050262 0.001675 19 0.033333
2011-01-01 00:27:00 2011-01-01 00:27:00 0.032249 0.000537 19 0.016667
2011-01-01 00:27:59 2011-01-01 00:27:59 0.180206 0.002953 19 …Run Code Online (Sandbox Code Playgroud) 我正在尝试PySpark Dataframe在 Python 中减去两列我在做这件事时遇到了很多问题,我将列类型作为时间戳,该列是date1 = 2011-01-03 13:25:59并且想要从其他日期列中减去它,date2 = 2011-01-03 13:27:00所以我想要date2 - date1从这些数据帧列中减去单独的 timediff 列,显示这两列的差异,例如timeDiff = 00:01:01
我怎样才能在 PySaprk 中做到这一点
我尝试了以下代码:
#timeDiff = df.withColumn(('timeDiff', col(df['date2']) - col(df['date1'])))
Run Code Online (Sandbox Code Playgroud)
此代码不起作用
我试着做这个简单的事情:
timeDiff = df['date2'] - df['date1']
Run Code Online (Sandbox Code Playgroud)
这实际上有效,但之后我尝试通过以下代码将此单独的列添加到我的数据框中
df = df.withColumn("Duration", timeDiff)
Run Code Online (Sandbox Code Playgroud)
它有以下错误:
Py4JJavaError: An error occurred while calling o107.withColumn.
: org.apache.spark.sql.AnalysisException: cannot resolve '(`date2` - `date1`)' due to data type mismatch: '(`date2` - `date1`)' requires (numeric or calendarinterval) type, not timestamp;;
Run Code Online (Sandbox Code Playgroud)
任何人都可以用任何其他方法帮助我,或者我该如何解决这个错误?
如何设置 5 分钟窗口大小以通过滚动平均值重新采样数据?我尝试了不同的方法,但总是收到有关 DateTimeIndex 的错误,即使我的数据的 Index 为 DateTimeIndex..
有谁知道正确的方法吗??
数据
index Speed rolling_meanVal
DateTime
1/1/2011 0:04 2165 0.057579 NaN
1/1/2011 0:07 3438 0.044646 NaN
1/1/2011 0:10 4713 0.043154 NaN
1/1/2011 0:13 6054 0.014403 NaN
1/1/2011 0:16 7385 0.038972 0.039751
1/1/2011 0:19 8734 0.019927 0.036447
1/1/2011 0:21 10045 0.039548 0.03689
1/1/2011 0:24 11374 0.089709 0.043492
1/1/2011 0:27 12661 0.102816 0.050084
1/1/2011 0:30 13960 0.119699 0.057045
1/1/2011 0:33 15261 0.095108 0.060505
1/1/2011 0:36 16579 0.051854 0.059784
1/1/2011 0:40 17848 0.035654 0.057928
1/1/2011 …Run Code Online (Sandbox Code Playgroud)