小编Jef*_*eff的帖子

在pySpark中从dict构建一行

我正在尝试在pySpark 1.6.1中动态构建一行,然后将其构建为数据帧.一般的想法是将结果扩展describe到包括例如偏斜和峰度.这是我认为应该工作的:

from pyspark.sql import Row

row_dict = {'C0': -1.1990072635132698,
            'C3': 0.12605772684660232,
            'C4': 0.5760856026559944,
            'C5': 0.1951877800894315,
            'C6': 24.72378589441825,
            'summary': 'kurtosis'}

new_row = Row(row_dict)
Run Code Online (Sandbox Code Playgroud)

但这会返回TypeError: sequence item 0: expected string, dict found一个相当明显的错误.然后我发现如果我先定义Row字段,我可以使用dict:

r = Row('summary', 'C0', 'C3', 'C4', 'C5', 'C6')
r(row_dict)
> Row(summary={'summary': 'kurtosis', 'C3': 0.12605772684660232, 'C0': -1.1990072635132698, 'C6': 24.72378589441825, 'C5': 0.1951877800894315, 'C4': 0.5760856026559944})
Run Code Online (Sandbox Code Playgroud)

这将是一个很好的步骤,除了它似乎我不能动态指定字段Row.我需要这个来处理未知名称的未知行数.根据文档,您实际上可以采用另一种方式:

>>> Row(name="Alice", age=11).asDict() == {'name': 'Alice', 'age': 11}
True
Run Code Online (Sandbox Code Playgroud)

所以看起来我应该能够做到这一点.此外,似乎还有一些旧版本可能会弃用的功能,例如此处.我缺少一个更新的等价物吗?

python apache-spark pyspark

23
推荐指数
2
解决办法
1万
查看次数

HTML锚定在Github上的Jupyter笔记本中

因此,有很多关于在markdown中创建锚点以及在笔记本中创建内部表格内容类型锚点的内容.我需要的是能够从外部源访问Github笔记本中的锚点,例如:

https://github.com/.../mynotebook.ipynb#thiscell
Run Code Online (Sandbox Code Playgroud)

我有这样一些托管的交互式教程,还有一本我希望能够链接到笔记本部分的手册.我可以使用以下方法将锚标记添加到markdown单元格中:

<a id='thiscell'></a> 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用上面写的链接时,它只是将笔记本加载到顶部,就像没有引用锚一样.

html markdown github ipython jupyter

9
推荐指数
2
解决办法
987
查看次数

在pySpark ML中将列名称与模型参数相关

我正在对具有一个分类自变量的数据使用GLM(在Spark 2.0中使用ML)运行模型。我使用StringIndexer和将该列转换为伪变量OneHotEncoder,然后使用VectorAssembler将其与连续的独立变量组合成稀疏向量的列。

如果我的列名continuous以及categorical其中,所述第一浮体是一列,第二个是表示字符串的列(在这种情况下,8)不同的类别:

string_indexer = StringIndexer(inputCol='categorical', 
                               outputCol='categorical_index')

encoder = OneHotEncoder(inputCol ='categorical_index',
                        outputCol='categorical_vector')

assembler = VectorAssembler(inputCols=['continuous', 'categorical_vector'],
                            outputCol='indep_vars')

pipeline  = Pipeline(stages=string_indexer+encoder+assembler)
model = pipeline.fit(df)
df = model.transform(df)
Run Code Online (Sandbox Code Playgroud)

至此一切正常,我运行模型:

glm = GeneralizedLinearRegression(family='gaussian', 
                                  link='identity',
                                  labelCol='dep_var',
                                  featuresCol='indep_vars')
model = glm.fit(df)
model.params
Run Code Online (Sandbox Code Playgroud)

哪个输出:

DenseVector([8440.0573,3729.449,4388.9042,2879.1802,4613.7646,5163.3233,5186.6189,5513.1392])

很好,因为我可以验证这些系数(通过其他来源)本质上是正确的。但是,我还没有找到一种将这些系数链接到原始列名的好方法,这是我需要做的(我为SO简化了此模型;涉及更多)。

列名称和系数之间的关系被StringIndexer和打破OneHotEncoder。我发现了一种相当慢的方法:

df[['categorical', 'categorical_index']].distinct()
Run Code Online (Sandbox Code Playgroud)

这给了我一个较小的数据框,将字符串名称与数字名称相关联,我认为我可以将其与稀疏向量中的键相关联?但是,当您考虑数据规模时,这非常笨拙且缓慢。

有一个更好的方法吗?

python pyspark apache-spark-ml

6
推荐指数
2
解决办法
1275
查看次数