小编Jac*_*iel的帖子

Spark RDD到DataFrame python

我试图将Spark RDD转换为DataFrame.我已经看到了将方案传递给sqlContext.CreateDataFrame(rdd,schema)函数的文档和示例 .

但我有38列或字段,这将进一步增加.如果我手动给出指定每个字段信息的模式,那将会是如此繁琐的工作.

有没有其他方法可以在不知道先前列的信息的情况下指定模式.

python apache-spark pyspark spark-dataframe

34
推荐指数
1
解决办法
8万
查看次数

Pyspark Dataframe One-Hot编码

我正在使用分类数据在Spark DataFrame上进行数据准备.我需要对分类数据进行One-Hot-Encoding,我在spark 1.6上尝试了这个

sqlContext = SQLContext(sc)
df = sqlContext.createDataFrame([
    (0, "a"),
    (1, "b"),
    (2, "c"),
    (3, "a"),
    (4, "a"),
    (5, "c")
], ["id", "category"])

stringIndexer = StringIndexer(inputCol="category", outputCol="categoryIndex")
model = stringIndexer.fit(df)
indexed = model.transform(df)
encoder = OneHotEncoder(dropLast=False, inputCol="categoryIndex", outputCol="categoryVec")
encoded = encoder.transform(indexed)
encoded.select("id", "categoryVec").show()
Run Code Online (Sandbox Code Playgroud)

这段代码产生了这种格式的单热编码数据.

+---+-------------+
| id|  categoryVec|
+---+-------------+
|  0|(3,[0],[1.0])|
|  1|(3,[2],[1.0])|
|  2|(3,[1],[1.0])|
|  3|(3,[0],[1.0])|
|  4|(3,[0],[1.0])|
|  5|(3,[1],[1.0])|
+---+-------------+
Run Code Online (Sandbox Code Playgroud)

通常,我对One-Hot编码技术的期望是每个类别的每列和0,1个相应的值.如何从中获取这类数据?

apache-spark apache-spark-sql pyspark apache-spark-mllib one-hot-encoding

6
推荐指数
0
解决办法
1845
查看次数

卡方分析 - 预期频率在 (0,) 处有一个零元素。错误

我正在处理数据,试图查看两个变量之间的关联,并在 Python 的 Scipy 包中使用卡方分析。

这是两个变量的交叉表结果:

pd.crosstab(data['loan_default'],data['id_proofs'])
Run Code Online (Sandbox Code Playgroud)

结果:

   id_proofs    2   3   4   5
  loan_default              
    0   167035  15232   273 3
    1   46354   4202    54  1
Run Code Online (Sandbox Code Playgroud)

如果我对相同的数据应用卡方,我会看到一条错误:ValueError:内部计算的预期频率表在 (0,) 处有一个零元素。

代码:

from scipy.stats import chi2_contingency
stat,p,dof,expec = chi2_contingency(data['loan_default'],data['id_proofs'])
print(stat,p,dof,expec)
Run Code Online (Sandbox Code Playgroud)

错误报告:

    ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-154-63c6f49aec48> in <module>()
      1 from scipy.stats import chi2_contingency
----> 2 stat,p,dof,expec = chi2_contingency(data['loan_default'],data['id_proofs'])
      3 print(stat,p,dof,expec)

~/anaconda3/lib/python3.6/site-packages/scipy/stats/contingency.py in chi2_contingency(observed, correction, lambda_)
    251         zeropos = list(zip(*np.where(expected == 0)))[0]
    252         raise ValueError("The internally computed table of expected "
--> …
Run Code Online (Sandbox Code Playgroud)

python statistics machine-learning scipy chi-squared

6
推荐指数
1
解决办法
9951
查看次数

如何在 Scrapy 中使用下载器中间件

我正在使用scrapy 来抓取一些网页。我编写了自定义的ProxyMiddleware类,其中在process_request(self,request,spider)方法中实现了我的要求。这是我的代码(复制):

class ProxyMiddleware(scrapy.downloadermiddlewares.httpproxy):
def __init__(self, proxy_ip=''):
    self.proxy_ip = proxy_ip

def process_request(self,request,spider):
    ip = random.choice(self.proxy_list)
    if ip:
        request.meta['proxy'] = ip
    return request

proxy_list = [list of proxies]
Run Code Online (Sandbox Code Playgroud)

现在,我不明白scrapy 将如何考虑我的实现而不是默认类。经过一番搜索和头脑风暴,我的理解是,我需要在settings.py中进行更改

DOWNLOADER_MIDDLEWARES = {
    'IPProxy.middlewares.MyCustomDownloaderMiddleware': 543,
    'IPProxy.IPProxy.spiders.RandomProxy': 600
}
Run Code Online (Sandbox Code Playgroud)

为了让读者更好地了解我的项目结构,我在列表中添加了具有一些随机值的第二个元素。我的项目结构是:

在此处输入图片说明

我的问题是,

  • 如何正确使用settings.py 中的DOWNLOADER_MIDDLEWARES
  • 如何为 DOWNLOADER_MIDDLEWARES 中的元素赋值
  • 如何让scrapy调用我的自定义代码而不是默认代码

python scrapy python-2.7 scrapy-spider

5
推荐指数
1
解决办法
6057
查看次数

在SPARK Dataframe中缩放(标准化)列-Pyspark

我正在尝试使用python标准化SPARK DataFrame中的列。

我的数据集:

--------------------------
userID|Name|Revenue|No.of.Days|
--------------------------
1      A     12560    45
2      B     2312890  90
.      .       .       .
.      .       .       .
.      .       .       .
--------------------------
Run Code Online (Sandbox Code Playgroud)

在此数据集中,除了userID和Name外,我必须对收入和天数进行标准化。

输出应如下所示


userID|Name|Revenue|No.of.Days|
--------------------------
1      A     0.5     0.5
2      B     0.9       1
.      .       1     0.4
.      .     0.6       .
.      .       .       .
--------------------------
Run Code Online (Sandbox Code Playgroud)

用于计算或标准化各列中的值的公式为

val = (ei-min)/(max-min)
ei = column value at i th position
min = min value in that column
max = max value in that column
Run Code Online (Sandbox Code Playgroud)

如何使用PySpark轻松完成此操作?

python apache-spark pyspark

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

用 pandas 中另一个数据框中的值填充 Nulls

我有两个数据框。在 dataframe1 中,我有一列包含一些空值。我想通过比较每个数据帧的不同列的值,使用另一个数据帧(即 dataframe2)的值来填充这些空值。

数据框1:

Col1 Col2
A    Null
B    Null
C    NUll
A    1000
B    1120
C    3200
Run Code Online (Sandbox Code Playgroud)

数据框2:

Col1 Col2
A    500
B    110
C    320
Run Code Online (Sandbox Code Playgroud)

现在我想用第二个数据帧中的值填充第一个数据帧中的空值,其中 dataframe1.col1 = dataframe2.col1

最终期望的输出如下:

Col1 Col2
A    500
B    110
C    320
A    1000
B    1120
C    3200
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 Pandas Dataframes 中做到这一点。

python dataframe pandas

5
推荐指数
2
解决办法
4422
查看次数

Pandas DataFrame中列的值列表

我有一个DataFrame,其中一列有值列表(每个值都是一个特征的值).现在我需要将这些值列表转换为每列.
例如:DataFrame有两列,其中数据列是值列表

   data  ,  Time      
[1,2,3,4], 12:34   
[5,6,7,8], 12:36   
[9,1,2,3], 12:45
Run Code Online (Sandbox Code Playgroud)

我需要转换为

例如:

   data0 data1 data2 data3 Time
    1   ,  2  ,  3  ,  4  , 12:34    
    5   ,  6  ,  7  ,  8  , 12:36    
    9   ,  1  ,  2  ,  3  , 12:45
Run Code Online (Sandbox Code Playgroud)

我怎样才能有效地做到这一点?

python numpy dataframe pandas

4
推荐指数
2
解决办法
2287
查看次数

Neo4j - 如何在节点上显示属性,以便在浏览器中轻松识别?

我有一个示例图,其中有两种类型的节点:服务器和服务。
服务器和属性如下所示:

Server:{
"ip":"0.0.1.1"},
"location":"india",
"uptime":"120",
"services":["httpd","IPsec","irqbalance"],
}
Run Code Online (Sandbox Code Playgroud)

服务在哪里:

service:{
"service":"httpd"}
Run Code Online (Sandbox Code Playgroud)

我的连接图看起来像,在此处输入图片说明

服务器很容易用 ip 识别,但服务不是。我想在节点上显示服务属性。怎么做?

neo4j cypher py2neo

3
推荐指数
1
解决办法
2650
查看次数

通过一列,对熊猫中分组记录的另一列进行自定义操作

我想通过将另一列上的值分组来对一列应用自定义操作。按列分组以获取计数,然后将所有分组记录的另一个列值除以该计数。

我的数据框:

   emp opp amount
0  a   1   10
1  b   1   10
2  c   2   30
3  b   2   30
4  d   2   30
Run Code Online (Sandbox Code Playgroud)

我的情况:

  • 对于opp = 1,工作了两个emp(a,b)。因此,应将金额分成10/2 = 5
  • 对于opp = 2,工作了两个emp(b,c,d)。因此金额应为30/3 = 10

最终输出数据帧:

      emp opp amount
    0  a   1   5
    1  b   1   5
    2  c   2   10
    3  b   2   10
    4  d   2   10
Run Code Online (Sandbox Code Playgroud)

最好的办法是什么

python apply pandas

3
推荐指数
1
解决办法
849
查看次数

未绑定方法createDataFrame()

尝试从RDD创建DataFrame时遇到错误。
我的代码:

from pyspark import SparkConf, SparkContext
from pyspark import sql


conf = SparkConf()
conf.setMaster('local')
conf.setAppName('Test')
sc = SparkContext(conf = conf)
print sc.version

rdd = sc.parallelize([(0,1), (0,1), (0,2), (1,2), (1,10), (1,20), (3,18), (3,18), (3,18)])

df = sql.SQLContext.createDataFrame(rdd, ["id", "score"]).collect()

print df
Run Code Online (Sandbox Code Playgroud)

错误:

df = sql.SQLContext.createDataFrame(rdd, ["id", "score"]).collect()
TypeError: unbound method createDataFrame() must be called with SQLContext 
           instance as first argument (got RDD instance instead)
Run Code Online (Sandbox Code Playgroud)

我在spark shell中完成了相同的任务,其中直接的最后三行代码将打印这些值。我主要怀疑import语句,因为这是IDE和Shell之间的区别。

apache-spark pyspark

3
推荐指数
1
解决办法
4010
查看次数