我正在尝试在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)
所以看起来我应该能够做到这一点.此外,似乎还有一些旧版本可能会弃用的功能,例如此处.我缺少一个更新的等价物吗?
因此,有很多关于在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)
但是当我尝试使用上面写的链接时,它只是将笔记本加载到顶部,就像没有引用锚一样.
我正在对具有一个分类自变量的数据使用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)
这给了我一个较小的数据框,将字符串名称与数字名称相关联,我认为我可以将其与稀疏向量中的键相关联?但是,当您考虑数据规模时,这非常笨拙且缓慢。
有一个更好的方法吗?