是的,我知道这是一个经常性的问题,但我仍然找不到令人信服的答案。我什至在https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html上阅读,但找不到解决方法:
我正在运行包含jupyter(ipython)笔记本的python 3.6项目。我希望笔记本电脑导入一个自定义的本地helpers.py程序包,以后我可能还会在其他来源中使用它。
项目结构类似于:
my_project/
?
??? my_project/
? ??? notebooks/
? ??? a_notebook.ipynb
? ??? __init__.py # suppose to make package `my_project` importable
? ??? helpers.py
?
??? tests/
? ??? helpers_tests.py
?
??? .gitignore
??? LICENSE
??? README.md
??? requirements.txt
??? setup.py
Run Code Online (Sandbox Code Playgroud)
导入helpers笔记本时出现错误:
----> 4 import helpers
ModuleNotFoundError: No module named 'helpers'
Run Code Online (Sandbox Code Playgroud)
我也尝试过from my_project import helpers并且得到相同的错误ModuleNotFoundError: No module named 'my_project'
我终于(并暂时)使用了通常的技巧:
import sys
sys.path.append('..')
import helpers
Run Code Online (Sandbox Code Playgroud)
但它看起来很糟糕,我仍在寻找更好的解决方案
在Scala/Spark中,有一个数据帧:
val dfIn = sqlContext.createDataFrame(Seq(
("r0", 0, 2, 3),
("r1", 1, 0, 0),
("r2", 0, 2, 2))).toDF("id", "c0", "c1", "c2")
Run Code Online (Sandbox Code Playgroud)
我想计算一个新列maxCol拿着名称对应于(各行)的最大值之列.在这个例子中,输出应该是:
+---+---+---+---+------+
| id| c0| c1| c2|maxCol|
+---+---+---+---+------+
| r0| 0| 2| 3| c2|
| r1| 1| 0| 0| c0|
| r2| 0| 2| 2| c1|
+---+---+---+---+------+
Run Code Online (Sandbox Code Playgroud)
实际上,数据框有超过60列.因此,需要通用的解决方案.
Python Pandas中的等价物(是的,我知道,我应该与pyspark进行比较......)可能是:
dfOut = pd.concat([dfIn, dfIn.idxmax(axis=1).rename('maxCol')], axis=1)
Run Code Online (Sandbox Code Playgroud) 我正在使用spark-shell(Spark版本2.1.0,使用Scala版本2.11.8,OpenJDK 64位服务器VM,1.7.0_151).
我导入Column类:
scala> import org.apache.spark.sql.Column
import org.apache.spark.sql.Column
Run Code Online (Sandbox Code Playgroud)
我可以定义一个Column对象:
scala> val myCol: Column = col("blah")
myCol: org.apache.spark.sql.Column = blah
Run Code Online (Sandbox Code Playgroud)
并Column在函数定义中使用:
scala> def myFunc(c: Column) = ()
myFunc: (c: org.apache.spark.sql.Column)Unit
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是在定义类时,Column找不到:
scala> case class myClass(c: Column)
<console>:11: error: not found: type Column
case class myClass(c: Column)
Run Code Online (Sandbox Code Playgroud)
然而,单线程工作:
scala> case class myClass(c: org.apache.spark.sql.Column)
defined class myClass
Run Code Online (Sandbox Code Playgroud)
要么
scala> import org.apache.spark.sql.Column; case class myClass(c: Column)
import org.apache.spark.sql.Column
defined class myClass
Run Code Online (Sandbox Code Playgroud) 我已使用 AWS SageMaker 成功训练了 Scikit-Learn LSVC 模型。
我想在一个相对较大的数据集上进行批量预测(又名批量变换),该数据集是一个形状为 252772 x 185128 的 scipy 稀疏矩阵。(特征数量很高,因为存在词袋的单热编码和 ngrams 特征)。
我之所以挣扎是因为:
数据的大小
数据的格式
我做了几个实验来检查发生了什么:
它的工作原理
是在 SageMaker 笔记本上本地反序列化模型工件并根据稀疏矩阵的样本进行预测。
这只是为了检查模型是否可以对此类数据进行预测。
它有效
在 SageMaker 上启动批量转换作业并请求以密集 csv 格式转换小样本:它有效,但显然无法扩展。
代码是:
sklearn_model = SKLearnModel(
model_data=model_artifact_location_on_s3,
entry_point='my_script.py',
role=role,
sagemaker_session=sagemaker_session)
transformer = sklearn_model.transformer(
instance_count=1,
instance_type='ml.m4.xlarge',
max_payload=100)
transformer.transform(
data=batch_data,
content_type='text/csv',
split_type=None)
print('Waiting for transform job: ' + transformer.latest_transform_job.job_name)
transformer.wait()
Run Code Online (Sandbox Code Playgroud)
在哪里:
model_fn反序列化模型工件:def model_fn(model_dir):
clf = joblib.load(os.path.join(model_dir, "model.joblib"))
return clf
Run Code Online (Sandbox Code Playgroud)
batch_data是 csv 文件的 …python sparse-matrix amazon-web-services scikit-learn amazon-sagemaker
apache-spark ×2
python ×2
scala ×2
argmax ×1
dataframe ×1
import ×1
scala-repl ×1
scikit-learn ×1
shell ×1