我有50 GB的数据集,它不适合我的工作计算机的8 GB RAM,但它有1 TB的本地硬盘.
官方文档中的以下链接提到,如果数据不适合内存,Spark可以使用本地硬盘.
http://spark.apache.org/docs/latest/hardware-provisioning.html
本地磁盘
虽然Spark可以在内存中执行大量计算,但它仍然使用本地磁盘来存储不适合RAM的数据,以及保持各阶段之间的中间输出.
对我来说,计算时间并不是一个优先事项,但由于缺少备用选项,将数据装入单个计算机的RAM /硬盘进行处理更为重要.
注意:我正在寻找一个不包括以下项目的解决方案
我的最终目标是使用Spark MLLIB来构建机器学习模型.我正在寻找真实,实用的解决方案,人们成功地使用Spark来处理单个计算机中独立/本地模式下不适合RAM的数据.有没有成功完成这项工作而没有重大限制
问题
SAS具有类似的核外处理能力,使用它可以同时使用RAM和本地硬盘进行模型构建等.当数据超过RAM大小时,Spark可以以相同的方式工作吗?
SAS将完整的数据集写入".sas7bdat"格式的硬盘,Spark可以执行与硬盘类似的持久性操作吗?
df1
uid1 var1
0 John 3
1 Paul 4
2 George 5
Run Code Online (Sandbox Code Playgroud)
df2
uid1 var2
0 John 23
1 Paul 44
2 George 52
Run Code Online (Sandbox Code Playgroud)
df3
uid1 var3
0 John 31
1 Paul 45
2 George 53
Run Code Online (Sandbox Code Playgroud)
df_lst=[df1,df2,df3]
Run Code Online (Sandbox Code Playgroud)
如何基于公共密钥uid1合并/加入列表中的3个数据帧?
编辑:预期输出
df1
uid1 var1 var2 var3
0 John 3 23 31
1 Paul 4 44 45
2 George 5 52 53
Run Code Online (Sandbox Code Playgroud) 下面的链接解释了如何在 Spark 中实现 IF ELSE。
如何在 pyspark.sql.funtions.when() 中使用多个条件?
如果我的火花数据框看起来像这样
A B C
10 2 300
20 3 200
30 7 500
20 1 700
Run Code Online (Sandbox Code Playgroud)
但是我如何在火花中实现包含 ELSE IF 的以下逻辑。
If A>=20:
flag = 1
elif B> 4
flag = 2
elif C>500
flag = 3
elif (1<A<20 & B<2)
flag = 4
elif (1<A<20 & C<300)
flag = 5
elif (100<C<400 & B>6)
flag = 6
else flag = 0
Run Code Online (Sandbox Code Playgroud)
笔记:
apache-spark apache-spark-sql pyspark spark-dataframe apache-spark-mllib
我想用keras建立一个非线性回归模型来预测+ ve连续变量.对于以下模型,如何选择以下超参数?
码
def dnn_reg():
model = Sequential()
#layer 1
model.add(Dense(40, input_dim=13, kernel_initializer='normal'))
model.add(Activation('tanh'))
model.add(Dropout(0.2))
#layer 2
model.add(Dense(30, kernel_initializer='normal'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.4))
#layer 3
model.add(Dense(5, kernel_initializer='normal'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.4))
model.add(Dense(1, kernel_initializer='normal'))
model.add(Activation('relu'))
# Compile model
model.compile(loss='mean_squared_error', optimizer='adam')
return model
Run Code Online (Sandbox Code Playgroud)
我考虑过随机网格搜索,但我想使用hyperopt,我相信会更快.我最初使用https://github.com/maxpumperla/hyperas实现了调优.Hyperas不使用最新版本的keras.我怀疑keras正在快速发展,维护者很难使其兼容.所以我认为直接使用hyperopt将是一个更好的选择.
PS:我是超级参数调优和hyperopt的贝叶斯优化新手.
代码
import pandas as pd
df = pd.DataFrame({'A': [1, 1, 1, 2, 2],
'B': range(5),
'C': range(5)})
df1 = df.groupby('A').B.agg({'B': ['count','nunique'],'C': ['sum','median']})
df1.columns = ["_".join(x) for x in df1.columns.ravel()]
Run Code Online (Sandbox Code Playgroud)
df1 输出
B_count B_nunique C_sum C_median
A
1 3 3 3 1.0
2 2 2 7 3.5
Run Code Online (Sandbox Code Playgroud)
警告
__main__:1: FutureWarning: using a dict on a Series for aggregation
is deprecated and will be removed in a future version
Run Code Online (Sandbox Code Playgroud)
这是 Pandas 0.20 之前推荐的分组和重命名方式。在没有此警告的情况下实现相同 df1 输出的优雅方法是什么?
我想在spark数据帧中总结不同的列.
码
from pyspark.sql import functions as F
cols = ["A.p1","B.p1"]
df = spark.createDataFrame([[1,2],[4,89],[12,60]],schema=cols)
# 1. Works
df = df.withColumn('sum1', sum([df[col] for col in ["`A.p1`","`B.p1`"]]))
#2. Doesnt work
df = df.withColumn('sum1', F.sum([df[col] for col in ["`A.p1`","`B.p1`"]]))
#3. Doesnt work
df = df.withColumn('sum1', sum(df.select(["`A.p1`","`B.p1`"])))
Run Code Online (Sandbox Code Playgroud)
为什么不接近#2..不工作?我在Spark 2.2上
调用 的客户端微服务/do_something在 request/post() 调用中超时为 60 秒。此超时是固定的且无法更改。因此,如果/do_something需要 10 分钟,/do_something就会浪费 CPU 资源,因为客户端微服务在 60 秒后不会等待 的响应/do_something,这会浪费 CPU 10 分钟,从而增加成本。我们的预算有限。
当前的代码如下所示:
import time
from uvicorn import Server, Config
from random import randrange
from fastapi import FastAPI
app = FastAPI()
def some_func(text):
"""
Some computationally heavy function
whose execution time depends on input text size
"""
randinteger = randrange(1,120)
time.sleep(randinteger)# simulate processing of text
return text
@app.get("/do_something")
async def do_something():
response = some_func(text="hello world")
return {"response": …Run Code Online (Sandbox Code Playgroud) 我的输入数据框如下所示
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("Basics").getOrCreate()
df=spark.createDataFrame(data=[('Alice',4.300,None),('Bob',float('nan'),897)],schema=['name','High','Low'])
+-----+----+----+
| name|High| Low|
+-----+----+----+
|Alice| 4.3|null|
| Bob| NaN| 897|
+-----+----+----+
Run Code Online (Sandbox Code Playgroud)
预期产出除以10.0
+-----+----+----+
| name|High| Low|
+-----+----+----+
|Alice| 0.43|null|
| Bob| NaN| 89.7|
+-----+----+----+
Run Code Online (Sandbox Code Playgroud) 我无法在 stackoverflow 中找到基于值在列表中的字典进行替换的解决方案。
字典
dct = {"LOL": ["laught out loud", "laught-out loud"],
"TLDR": ["too long didn't read", "too long; did not read"],
"application": ["app"]}
Run Code Online (Sandbox Code Playgroud)
输入
input_df = pd.DataFrame([("haha too long didn't read and laught out loud :D"),
("laught-out loud so I couldnt too long; did not read"),
("what happened?")], columns=['text'])
Run Code Online (Sandbox Code Playgroud)
预期输出
output_df = pd.DataFrame([("haha TLDR and LOL :D"),
("LOL so I couldnt TLDR"),
("what happened?")], columns=['text'])
Run Code Online (Sandbox Code Playgroud)
编辑
在字典中添加了一个额外的条目,即“应用程序”:[“应用程序”]
当前的解决方案将输出作为“什么应用程序?”
请建议修复。
我有一个数据框,如下所示:
id value
100 a
100 b
100 c
100 d
200 1
200 2
200 3
Run Code Online (Sandbox Code Playgroud)
如何汇总为以下格式?
id value
100 ['a','b','c','d']
200 ['1','2','3']
Run Code Online (Sandbox Code Playgroud) 我使用下面的代码通过 Scikit learn 创建 k-means 集群。
kmean = KMeans(n_clusters=nclusters,n_jobs=-1,random_state=2376,max_iter=1000,n_init=1000,algorithm='full',init='k-means++')
kmean_fit = kmean.fit(clus_data)
Run Code Online (Sandbox Code Playgroud)
我还使用保存了质心kmean_fit.cluster_centers_
然后我腌制了 K 均值对象。
filename = pickle_path+'\\'+'_kmean_fit.sav'
pickle.dump(kmean_fit, open(filename, 'wb'))
Run Code Online (Sandbox Code Playgroud)
这样我就可以加载相同的 kmeans pickle 对象并在新数据出现时将其应用到新数据中,使用kmean_fit.predict().
问题 :
加载 kmeans pickle 对象并应用的方法是否
kmean_fit.predict()允许我根据现有集群的质心将新观察值分配给现有集群?这种方法是否只是从头开始对新数据进行重新聚类?
如果此方法不起作用,鉴于我已经使用高效的 python 代码保存了集群质心,如何将新观察值分配给现有集群?
PS:我知道使用现有集群作为因变量构建分类器是另一种方法,但由于时间紧迫,我不想这样做。
python cluster-analysis k-means scikit-learn text-classification
对于n个变量的给定范围.我以n = 3为例.
A : [1,3]
B: [5,10,12]
C: [100,113]
Run Code Online (Sandbox Code Playgroud)
请注意,上述范围内的值也可以是浮点数.
我们如何创建一个数据框,其中每列代表输入变量的唯一组合?
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12
a 1 1 1 3 3 3 1 1 1 3 3 3
b 5 10 12 5 10 12 5 10 12 5 10 12
c 100 100 100 100 100 100 113 113 113 113 113 113
Run Code Online (Sandbox Code Playgroud) python ×10
apache-spark ×5
pyspark ×4
pandas ×3
dataframe ×2
pyspark-sql ×2
bigdata ×1
combinations ×1
dictionary ×1
fastapi ×1
hadoop ×1
k-means ×1
keras ×1
loops ×1
optimization ×1
regex ×1
replace ×1
sas ×1
scikit-learn ×1
timeout ×1