假设我有一个 PySpark 数据框,如下所示:
+--+--+--+--+
|a |b |c |d |
+--+--+--+--+
|1 |0 |1 |2 |
|0 |2 |0 |1 |
|1 |0 |1 |2 |
|0 |4 |3 |1 |
+--+--+--+--+
Run Code Online (Sandbox Code Playgroud)
如何创建标记所有重复行的列,如下所示:
+--+--+--+--+--+
|a |b |c |d |e |
+--+--+--+--+--+
|1 |0 |1 |2 |1 |
|0 |2 |0 |1 |0 |
|1 |0 |1 |2 |1 |
|0 |4 |3 |1 |0 |
+--+--+--+--+--+
Run Code Online (Sandbox Code Playgroud)
我尝试使用 groupBy 和聚合函数无济于事。
Spacy 2.0的文档提到开发人员已添加了一些功能,以允许对Spacy进行腌制,以便可以由PySpark连接的Spark Cluster使用它,但是,他们没有提供有关如何执行此操作的说明。
有人可以解释我如何腌制Spacy的英语NE解析器以在udf函数中使用吗?
这不起作用:
from pyspark import cloudpickle
nlp = English()
pickled_nlp = cloudpickle.dumps(nlp)
Run Code Online (Sandbox Code Playgroud) 我在Python中使用Spacy for NLP.我试图用来nlp.pipe()生成一个Spacy doc对象列表,然后我可以分析它.奇怪的是,nlp.pipe()返回类的对象<generator object pipe at 0x7f28640fefa0>.如何让它按预期返回文档列表?
import Spacy
nlp = spacy.load('en_depent_web_md', disable=['tagging', 'parser'])
matches = ['one', 'two', 'three']
docs = nlp.pipe(matches)
docs
Run Code Online (Sandbox Code Playgroud) 我正在尝试将自定义PhraseMatcher()组件集成到我的nlp管道中,这样我就可以加载自定义Spacy模型,而无需在每次加载时将自定义组件重新添加到通用模型中.
如何加载包含自定义管道组件的Spacy模型?
我创建组件,将其添加到我的管道并使用以下内容保存:
import requests
from spacy.lang.en import English
from spacy.matcher import PhraseMatcher
from spacy.tokens import Doc, Span, Token
class RESTCountriesComponent(object):
name = 'countries'
def __init__(self, nlp, label='GPE'):
self.countries = [u'MyCountry', u'MyOtherCountry']
self.label = nlp.vocab.strings[label]
patterns = [nlp(c) for c in self.countries]
self.matcher = PhraseMatcher(nlp.vocab)
self.matcher.add('COUNTRIES', None, *patterns)
def __call__(self, doc):
matches = self.matcher(doc)
spans = []
for _, start, end in matches:
entity = Span(doc, start, end, label=self.label)
spans.append(entity)
doc.ents = list(doc.ents) + spans
for span in …Run Code Online (Sandbox Code Playgroud) 假设我有一个像这样的Pandas系列:
import pandas as pd
pd.Series([1, 0, 0, 1, 0, 0, 0], name='series')
Run Code Online (Sandbox Code Playgroud)
我如何添加自最后一个> 0以来的行数的列,如下所示:
pd.DataFrame({
'series': [1, 0, 0, 1, 0, 0, 0],
'row_num': [0, 1, 2, 0, 1, 2, 3]
})
Run Code Online (Sandbox Code Playgroud) 我是熊猫的新手.我有一个像这样的Pandas数据框:
df = pd.DataFrame(data={'id': [1, 1, 1, 2, 2, 2, 2], 'val1': [0, 1, 0, 0, 1, 0, 0]})
Run Code Online (Sandbox Code Playgroud)
我想添加一个列val2,指示一行是否落在另一行与其id自身相同的行之下val1 == 1.
结果将是一个数据框,如:
df = pd.DataFrame(data={'id': [1, 1, 1, 2, 2, 2, 2], 'val1': [0, 1, 0, 0, 1, 0, 0], 'val2': [0, 0, 1, 0, 0, 1, 1]})
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是使用apply语句,但这些只是按行进行.从我的循环经验来看,永远不是答案.任何帮助将不胜感激!
假设我有一个像这样的 PySpark 数据框:
1 0 1 0
0 0 1 1
0 1 0 1
Run Code Online (Sandbox Code Playgroud)
如何将一行的最后一列和下一列附加到当前行,如下所示:
1 0 1 0 0 0 0 0 0 0 1 1
0 0 1 1 1 0 1 0 0 1 0 1
0 1 0 1 0 0 1 1 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
我熟悉.withColumn()添加列的方法,但不确定我会在该字段中放置什么。
它们"0 0 0 0"是占位符值,因为这些行之前和之后没有先前或后续行。
我想将PySpark数据框的多列合并到的一列中StructType。
假设我有一个像这样的数据框:
columns = ['id', 'dogs', 'cats']
vals = [(1, 2, 0),(2, 0, 1)]
df = sqlContext.createDataFrame(vals, columns)
Run Code Online (Sandbox Code Playgroud)
我希望得到的数据框类似于此(不是像它实际打印的那样,而是让您了解如果您还不熟悉StructType的意思):
id | animals
1 | dogs=2, cats=0
2 | dogs=0, cats=1
Run Code Online (Sandbox Code Playgroud)
现在,我可以完成以下任务:
StructType(
[StructField('dogs', IntegerType(), True),
[StructField('cats', IntegerType(), True)
)
Run Code Online (Sandbox Code Playgroud)
udf然而,在我的结尾,我宁愿只使用一个函数来完成它。如果不存在,我会感到惊讶。