我正在使用Spark和PySpark.我试图实现相当于以下伪代码的结果:
df = df.withColumn('new_column',
IF fruit1 == fruit2 THEN 1, ELSE 0. IF fruit1 IS NULL OR fruit2 IS NULL 3.)
Run Code Online (Sandbox Code Playgroud)
我试图在PySpark中这样做,但我不确定语法.有什么指针吗?我调查expr()但无法让它工作.
请注意,这df是一个pyspark.sql.dataframe.DataFrame.
我在PySpark(ML包)中训练了LogisticRegression模型,预测结果是PySpark DataFrame(cv_predictions)(参见[1]).该probability列(见[2])是一种vector类型(见[3]).
[1]
type(cv_predictions_prod)
pyspark.sql.dataframe.DataFrame
[2]
cv_predictions_prod.select('probability').show(10, False)
+----------------------------------------+
|probability |
+----------------------------------------+
|[0.31559134817066054,0.6844086518293395]|
|[0.8937864350711228,0.10621356492887715]|
|[0.8615878905395029,0.1384121094604972] |
|[0.9594427633777901,0.04055723662220989]|
|[0.5391547673698157,0.46084523263018434]|
|[0.2820729747752462,0.7179270252247538] |
|[0.7730465873083118,0.22695341269168817]|
|[0.6346585276598942,0.3653414723401058] |
|[0.6346585276598942,0.3653414723401058] |
|[0.637279255218404,0.362720744781596] |
+----------------------------------------+
only showing top 10 rows
[3]
cv_predictions_prod.printSchema()
root
...
|-- rawPrediction: vector (nullable = true)
|-- probability: vector (nullable = true)
|-- prediction: double (nullable = true)
Run Code Online (Sandbox Code Playgroud)
如何创建解析vectorPySpark DataFrame,以便创建一个新列,只拉取每个probability向量的第一个元素?
这个问题类似于,但下面链接中的解决方案不起作用/我不清楚:
我的Jupyter笔记本的python内核不断消亡。我之前已经成功运行了以下所有代码。目前,存在问题。首先,我将向您展示我能够成功运行的代码块:
import xgboost as xgb
xgtrain = xgb.DMatrix(data = X_train_sub.values, label = Y_train.values) # create dense matrix of training values
xgtest = xgb.DMatrix(data = X_test_sub.values, label = Y_test.values) # create dense matrix of test values
param = {'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic'} # specify parameters via map
Run Code Online (Sandbox Code Playgroud)
我的数据很小的地方:
X_train_imp_sub.shape
(1365, 18)
Run Code Online (Sandbox Code Playgroud)
但是,我笔记本的内核一直死在这个块上:
xgmodel = xgb.train(param, xgtrain, num_boost_round = 2) # train the model
predictions = xgmodel.predict(xgtest) # make prediction
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_true = Y_test,
y_pred = predictions.round(), …Run Code Online (Sandbox Code Playgroud) 问题
我正在跟踪一些代码并得到与X11相关的错误.为了重新创建我的错误,我运行了x11()并获得了以下内容:
> x11()
Error in x11() : X11 is not available
Run Code Online (Sandbox Code Playgroud)
我确实在R中绘制了加载XQuartz程序以显示的东西.
我尝试了什么
?x11(),看到它来自{grDevices}包装.我加载了该库,再次尝试,但得到了同样的错误.我读到X11与XQuartz有关.install.packages("Cairo")
> x11( width=3, height=3)
Error in x11(width = 3, height = 3) : X11 is not available
> Sys.getenv("DISPLAY")
[1] "/private/tmp/com.apple.launchd.F1bsaVCA43/org.macosforge.xquartz:0"
> capabilities()
jpeg png tiff tcltk X11 aqua http/ftp
TRUE TRUE TRUE TRUE FALSE TRUE TRUE
sockets libxml fifo cledit iconv NLS profmem
TRUE TRUE TRUE TRUE TRUE TRUE TRUE
cairo ICU long.double libcurl …
我有一个像这样的数据集:
print(X_test.dtypes)
metric1 int64
rank float64
device_type int8
NA_estimate float64
Run Code Online (Sandbox Code Playgroud)
当我尝试对此数据集进行预测时,出现以下错误:
y_test_pred_xgb = clf_xgb.predict(xgb.DMatrix(X_test))
TypeError: Not supported type for data.<class 'xgboost.core.DMatrix'>
Run Code Online (Sandbox Code Playgroud)
我进行了一些搜索,但只找到了object引起问题的变量数据类型的讨论。我的数据是否还有其他问题或者问题是其他原因?我查看了各种博客和 Kaggle 代码,但没有运气。
我正在和一个人合作pyspark.sql.dataframe.DataFrame.我想stack基于多个变量而不是单个变量来过滤行{val}.我正在使用Python 2 Jupyter笔记本.目前,我做了以下事情:
stack = hiveContext.sql("""
SELECT *
FROM db.table
WHERE col_1 != ''
""")
stack.show()
+---+-------+-------+---------+
| id| col_1 | . . . | list |
+---+-------+-------+---------+
| 1 | 524 | . . . |[1, 2] |
| 2 | 765 | . . . |[2, 3] |
.
.
.
| 9 | 765 | . . . |[4, 5, 8]|
for i in len(list):
filtered_stack = stack.filter("array_contains(list, {val})".format(val=val.append(list[i])))
(some query …Run Code Online (Sandbox Code Playgroud) 我在 Jupyter 笔记本中使用 PySpark。以下步骤最多需要 100 秒,这是可以的。
toydf = df.select("column_A").limit(20)
Run Code Online (Sandbox Code Playgroud)
但是,接下来的show()步骤需要 2-3 分钟。它只有 20 行整数列表,每个列表不超过 60 个元素。为什么需要这么长时间?
toydf.show()
Run Code Online (Sandbox Code Playgroud)
df 生成如下:
spark = SparkSession.builder\
.config(conf=conf)\
.enableHiveSupport()\
.getOrCreate()
df = spark.sql("""SELECT column_A
FROM datascience.email_aac1_pid_enl_pid_1702""")
Run Code Online (Sandbox Code Playgroud) 我有一个约80,000行乘26列的数据集。这些行对应于“ SKU”或机器人构建集的唯一ID。这些列对应于26个不同的机器人零件。一个单元包含一部分对构建整个机器人的贡献。行的比例之和可能不等于1.0,因为构建集不一定总具有构建整个机器人所需的零件的100%。
主要目标是构建一个接受SKU作为输入并输出互补SKU列表的功能。补充行定义为:
目标是找到补充给定SKU的所有可能的SKU集,从而可以构建整个机器人。另外,重要的是要看到weightedPrice这套“科学怪人” SKU的每个机器人的加权收入(“ ”)。很好地展示了weightedPrice每个补充SKU的添加如何变化。
最低工作玩具示例(MWE):
set.seed(1)
a = runif(n=60, min=0, max=0.2)
a[a<0.12] = 0
n = 10
A = as.data.frame(matrix(a,
nrow=n,
ncol=6,
byrow = TRUE))
A$rowTally <- rowSums(A != 0)
A$sku <- seq(from = 1, to = n)
A$totalDollarSales <- runif(n=n, min=1*10^2, max=1*10^6)
A$totalUnitSales <- runif(n=n, min=1*10^2, max=1*10^6)
names(A) <- c("p1_prop", "p2_prop", "p3_prop", "p4_prop", "p5_prop", "p6_prop", "rowTally", "sku", "totalDollarSales", "totalUnitSales")
A <- A[c("sku", "p1_prop", "p2_prop", "p3_prop", "p4_prop", "p5_prop", "p6_prop", "rowTally", "totalDollarSales", "totalUnitSales")]
A$dollarsPerRobot …Run Code Online (Sandbox Code Playgroud) 我的问题在标题中得到了解释。我已经尝试编译我在这里找到的示例 .Rmd:http ://www.ssc.wisc.edu/~hemken/Stataworkshops/Stata%20and%20R%20Markdown/ 除了在线查找各种资源无济于事之外。虽然我的资源 Doug 能够编译 RMarkdown,但下面的 MWE 出现错误。
MWE 是:
---
title: "Stata and R Markdown (Windows)"
author: "Doug Hemken"
date: "July 2015"
output:
html_document:
toc: yes
---
```{r, echo=FALSE, message=FALSE}
require(knitr)
statapath <- "/Applications/Stata/Stata.app"
opts_chunk$set(engine="stata", engine.path=statapath, comment="")
```
### Descriptive Statistics
A simple example.
```{r}
sysuse auto
summarize
```
Run Code Online (Sandbox Code Playgroud)
RStudio 控制台的输出/错误是:
processing file: stata.Rmd
|................ | 25%
ordinary text without R code
|................................ | 50%
label: unnamed-chunk-1 (with options)
List of 2
$ echo : logi FALSE …Run Code Online (Sandbox Code Playgroud) 如果两个字符串之间的Levenshtein距离,s并且t由下式给出L(s,t),
以下两种不同的规范化方案对结果启发式的影响有何不同?
L(s,t) / [length(s) + length(t)]
L(s,t) / max[length(s), length(t)]
(L(s,t)*2) / [length(s) + length(t)]
我注意到Levenshtein距离Wikipedia页面建议使用规范化方法2,但没有提及方法1。这两种方法是否同样有效?只是想知道是否有数学上的理由来使用一种方法。
另外,方法1和方法3有什么区别?
用下面的例子:
s = "Hi, my name is"
t = "Hello, my name is"
L(s,t) = 4
length(s) = 14 (包括空格)
length(t) = 17 (包括空格)
给出以上三种归一化算法的Levenshtein距离为:
4 /(14 + 17)= 0.129
4 /(17)= 0.235
(4 * 2)/(14 + 17)= 0.258