我正在寻找一种方法来在pyspark中选择我的数据帧的列.对于第一行,我知道我可以使用df.first()但不确定列,因为它们没有列名.
我有5列,想要遍历每一列.
+--+---+---+---+---+---+---+
|_1| _2| _3| _4| _5| _6| _7|
+--+---+---+---+---+---+---+
|1 |0.0|0.0|0.0|1.0|0.0|0.0|
|2 |1.0|0.0|0.0|0.0|0.0|0.0|
|3 |0.0|0.0|1.0|0.0|0.0|0.0|
Run Code Online (Sandbox Code Playgroud) 我的 Angular 2 Web 应用程序出现问题。
在 Node JS 服务器端,我遇到了 CORS 预检的问题。
我想在服务器上上传一个文件,当我这样做时,我遇到了这个问题:
XMLHttpRequest 无法加载http://localhost:4000/upload。对预检请求的响应未通过访问控制检查:当请求的凭据模式为“包含”时,响应中“Access-Control-Allow-Origin”标头的值不得为通配符“*”。因此,不允许访问Origin ' http://localhost:3000 '。XMLHttpRequest 发起的请求的凭证模式由 withCredentials 属性控制。
其中 localhost:4000 是我的服务器, localhost:3000 是我的客户端。
我的server.js文件是这样的:
require('rootpath')();
var express = require('express');
var app = express();
var cors = require('cors');
var bodyParser = require('body-parser');
var expressJwt = require('express-jwt');
var config = require('config.json');
var multer = require('multer');
app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// // use JWT auth to secure the api
app.use(expressJwt({ secret: config.secret }).unless({ path: ['/users/authenticate', …Run Code Online (Sandbox Code Playgroud) 我有一个包含卡、时间和金额的数据框,我需要在一个月的窗口内汇总卡的金额(总和和计数)。
数据如下:
+--------------------+-------------------+------------+
| card_uid| date|amount_local|
+--------------------+-------------------+------------+
|card_001H4Mw1Ha0M...|2016-05-04 17:54:30| 8.99|
|card_0026uGZQwZQd...|2016-05-06 12:16:18| 16.19|
|card_0026uGZQwZQd...|2016-07-06 12:17:57| 16.19|
|card_003STfrgB8SZ...|2016-12-04 10:05:21| 58.8|
|card_005gBxyiDc6b...|2016-09-10 18:58:25| 27.95|
|card_005gBxyiDc6b...|2016-11-12 11:18:29| 12.99|
Run Code Online (Sandbox Code Playgroud)
这就是我到目前为止所做的。
+--------------------+-------------------+------------+----------------+
| card_uid| date|amount_local|duration_cum_sum|
+--------------------+-------------------+------------+----------------+
|card_001H4Mw1Ha0M...|2016-05-04 17:54:30| 8.99| 8.99|
|card_0026uGZQwZQd...|2016-05-06 12:16:18| 16.19| 16.19|
|card_0026uGZQwZQd...|2016-07-06 12:17:57| 16.19| 32.38|
|card_003STfrgB8SZ...|2016-12-04 10:05:21| 58.8| 58.8|
|card_005gBxyiDc6b...|2016-09-10 18:58:25| 27.95| 27.95|
|card_005gBxyiDc6b...|2016-11-12 11:18:29| 12.99| 40.94|
Run Code Online (Sandbox Code Playgroud)
窗口函数如下:
partition = Window.partitionBy("card_uid").orderBy("date")
previousTransactionDate = data.withColumn("previous_tr_time", lag(data.date).over(partition)).select("transaction_id", "card_uid", "date", "previous_tr_time")
df_cum_sum = data.withColumn("duration_cum_sum", sum('amount_local').over(partition))
df_cum_sum.orderBy("card_uid","date").select("card_uid", "date", "amount_local", "duration_cum_sum").show()
Run Code Online (Sandbox Code Playgroud)
但我唯一想补充的是两件事:
我正在尝试在以下字符串中将第二个“ AND”替换为“ OR”:
country == "BR" AND (leftHour >= 6 AND rightHour < 24)
我的策略是使用regex做到这一点:\((.*)\)
但这匹配方括号之间的所有字符,我只想匹配AND两个方括号之间的字符。
在Go中是完美的,但是好的正则表达式就足够了。
编辑:字符串不是固定的,例如,我们可以有多个“ AND”,例如:
currency == "USD" AND country == "BR" AND (leftHour >= 6 AND rightHour < 24)
我正在尝试使用 pyspark 和 udf 来调整小时数。
该函数在 python 中工作正常,但在使用 pyspark 时效果不佳。
输入是:
date = Timestamp('2016-11-18 01:45:55') # type is pandas._libs.tslibs.timestamps.Timestamp
def time_feature_creation_spark(date):
return date.round("H").hour
time_feature_creation_udf = udf(lambda x : time_feature_creation_spark(x), IntegerType())
Run Code Online (Sandbox Code Playgroud)
然后我在提供 spark 的函数中使用它:
data = data.withColumn("hour", time_feature_creation_udf(data["date"])
错误是:
类型错误:“列”对象不可调用
预期输出只是日期时间中最接近的小时(例如 20h45 最接近 21h,因此返回 21)
apache-spark ×3
pyspark ×3
python ×3
angular ×1
cors ×1
go ×1
node.js ×1
pyspark-sql ×1
regex ×1