0%

GeoPySpark处理各类栅格数据

在开始之前,我们首先下载样例数据和导入模块包:

1
curl -o /Users/xujavy/Documents/Work/data/jupyter_data/cropped.tif https://s3.amazonaws.com/geopyspark-test/example-files/cropped.tif
1
2
3
# geopyspark需要设置SPARK_HOME
import os
os.environ["SPARK_HOME"] = '/Users/xujavy/Documents/Work/geoserver/installpackages/spark-2.2.3-bin-hadoop2.7'
1
2
3
4
5
6
7
8
9
10
import datetime
import numpy as np
import pyproj
import geopyspark as gps

from pyspark import SparkContext
from shapely.geometry import box, Point

conf = gps.geopyspark_conf(master="local[*]", appName="layers")
pysc = SparkContext(conf=conf)

如何在GeoPySpark中存储和表示数据?

Read more »

Python下的GeoTrellis —— GeoPySpark

什么是GeoPySpark

GeoPySpark是Scala库GeoTrellis的Python语言库。与GeoTrellis一样,这个项目也是在Apache 2许可下发布的。

GeoPySpark试图利用GeoTrellis来实现对栅格数据的读取、写入和操作。因此,它能够扩展到数据,并且仍然能够很好地执行。

除了栅格处理,GeoPySpark还允许将栅格数据渲染成PNG。该项目的目标之一是能够以web速度处理栅格数据并对大型数据集执行批处理。

为什么要用GeoPySpark

Python中的处理栅格已经取得了长足的进步;然而,随着数据集大小的增加,仍然会出现问题。无论是性能还是易用性,随着越来越多的数据向公众开放,这类问题将变得更加普遍。

人们可以求助于地理网格来解决上述问题(并且应该尝试一下!),但这也带来了新的挑战。Scala虽然是一门强大的语言,但它的学习曲线有些陡峭。这可能会耽误那些没有时间和/或兴趣学习一门新语言的人。

通过Scala的速度和可伸缩性以及Python的易用性,GeoPySpark可以解决这种困境。

核心概念

Read more »

在PySpark下使用Pandas和Apache Arrow

在PySpark下的Apache Arrow

Apache Arrow是一种内存中的列式数据格式,在Spark中用于在JVM和Python进程之间高效地传输数据。目前,这对于使用panda/NumPy数据的Python用户最为有利。它的使用不是自动的,可能需要对配置或代码进行一些细微的更改,以充分利用和确保兼容性。本指南将对如何在Spark中使用Apache Arrow进行高级描述,并突出显示在处理启用箭头的数据时的任何差异。

确保PyArrow安装

如果使用pip安装PySpark,那么可以使用命令pip install PySpark将PyArrow作为SQL模块的额外依赖项引入。否则,必须确保在所有集群节点上安装并可用PyArrow。当前支持的版本是0.8.0。您可以从conda-forge通道使用pip或conda进行安装。有关详细信息,请参见PyArrow安装

支持与Pandas的相互转换

Read more »

岛屿的周长

题目说明

给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。

网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

Read more »

逃脱阻碍者

题目说明

你在进行一个简化版的吃豆人游戏。你从 (0, 0) 点开始出发,你的目的地是 (target[0], target[1]) 。地图上有一些阻碍者,第 i 个阻碍者从 (ghosts[i][0], ghosts[i][1]) 出发。

每一回合,你和阻碍者们可以同时向东,西,南,北四个方向移动,每次可以移动到距离原位置1个单位的新位置。

如果你可以在任何阻碍者抓住你之前到达目的地(阻碍者可以采取任意行动方式),则被视为逃脱成功。如果你和阻碍者同时到达了一个位置(包括目的地)都不算是逃脱成功。

当且仅当你有可能成功逃脱时,输出True

Read more »

JupyterHub的授权登录

关于JupyterHub的安装和配置可以查看此处。现在我们来看一下JupyterHub的授权方式。
本人在本人中介绍两种授权方式:OAuth2和Github的授权方式,其他方式大致一样,需要的可以看官网介绍。

安装授权包

1
python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple oauthenticator

Github授权

  1. 创建Github OAuth账户信息,点击Github Oauth,创建信息,如下图所示:

  2. 创建完后,我们进行jupyterhub_config文件的配置

    vi ./jupyterhub_config.py

    1
    2
    3
    4
    5
    6
    from oauthenticator.github import GitHubOAuthenticator
    c.JupyterHub.authenticator_class = GitHubOAuthenticator
    c.GitHubOAuthenticator.oauth_callback_url = 'http[s]://[your-host]/hub/oauth_callback
    c.GitHubOAuthenticator.client_id = 'xxxxxxxx' #
    c.GitHubOAuthenticator.client_secret = 'xxxxxxxx' #
    c.GitHubOAuthenticator.scope = ['user:email'] #此处设置你的用户名和邮箱

    此处要填写的信息,可以查看此处:

  3. 配置完,点击登录地址,可以看到此处登录信息:

OAuth2授权

Read more »

JupyterHub的安装和使用

JupyterHub简介

JupyterHub 一个支持多用户的Jupyter Notebook服务器,用于创建、管理、代理多个Jupyter Notebook实例。具有扩展性和可定制性。

JupyterHub的安装

  1. 在CentOS下安装JupyterHub
    1
    2
    3
    4
    yum install npm
    npm install -g configurable-http-proxy
    python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple JupyterHub
    python3 -m pip install notebook
  2. 启动JupyterHub
    Read more »

Jupyter的安装和使用

Jupyter简介

Jupyter Notebook 是一个开源的web应用程序,允许您创建和共享包含实时代码、等式、可视化和叙述性文本的文档。用途包括:数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等等,解释来自于出自官网

Project Jupyter 的存在是为了开发跨越数十种编程语言的开源软件、开放标准和交互式计算服务。

Jupyter的安装

Read more »

买卖股票的最佳时机II

题目说明

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:

1
2
3
4
输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

示例 2:

1
2
3
4
5
输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

1
2
3
输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
Read more »

Spark的使用

起点:SparkSession

Spark中所有功能的入口点都是SparkSession。要创建一个基本的SparkSession,只需使用SparkSession.builder:

1
2
3
4
5
6
7
from pyspark.sql import SparkSession

spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()

在Spark 2.0中的SparkSession为Hive特性提供了内置支持,包括使用HiveQL编写查询、访问Hive UDF和读取Hive表数据的能力。但是要使用这些特性,不一定要安装和配置一个Hive。

创建DataFrames

使用SparkSession,应用程序可以创建Datafrmaes从现有的RDD、Hive表或Spark数据源

例如,下面根据JSON文件的内容创建一个DataFrame:

1
2
3
4
5
6
7
8
9
10
11
# spark is an existing SparkSession
df = spark.read.json("examples/src/main/resources/people.json")
# Displays the content of the DataFrame to stdout
df.show()
# +----+-------+
# | age| name|
# +----+-------+
# |null|Michael|
# | 30| Andy|
# | 19| Justin|
# +----+-------+
Read more »