您现在的位置是:主页 > news > 哈尔滨建设网站公司哪家好/怎么做盲盒
哈尔滨建设网站公司哪家好/怎么做盲盒
admin2025/5/19 19:41:52【news】
简介哈尔滨建设网站公司哪家好,怎么做盲盒,电商网站建设 网站定制开发,做网站套模板1. 写在前面 今天花费了也算一天的时间在采坑, 特意借这个时间记录一下整个采坑的过程。 这次要做的事情是这样, 分别在服务器上和本地的pycharm上运行pyspark程序, 程序很简单,就是wordcount, 代码如下:…
1. 写在前面
今天花费了也算一天的时间在采坑, 特意借这个时间记录一下整个采坑的过程。
这次要做的事情是这样, 分别在服务器上和本地的pycharm上运行pyspark程序, 程序很简单,就是wordcount, 代码如下:
from pyspark import SparkContextsc = SparkContext('local[2]', 'wordcount')
rdd = sc.textFile('file:///home/hduser/bigdata/1.txt').flatMap(lambda x: x.split()).map(lambda x: (x, 1)).reduceByKey(lambda a, b: a+b)sc.collect()
把这个程序分别放到服务器的命令行和本地的pycharm中进行运行, 这其中的环境配置踩了一些坑, 这里要来记录一下。
这次比较大的收获就是使用本地的Pycharm连接远程服务器上的python解释器,然后在里面可以运行pyspark程序了,并且能够做到本地与远程的代码同步, 这样的好处,就是开发的时候,可以直接借助本地的Pycharm进行开发程序, 然后就直接同步到远程的服务器上去, 非常的方便,再也不用在远程服务器的命令行中运行pyspark程序了,哈哈。
下面开始走一遍, 首先, 我目前的版本配置:
- Hadoop 2.6.0
- Spark 1.4.1
python环境的搭建用的是anaconda3, 里面的python版本必须使用3.6以下, 我用的是python3.5.4。 否则, 运行pyspark会报错。
下面说一下已经完成的准备工作, Hadoop集群搭建完成, 1个master, 2个DataNode, Spark已经安装好。Anaconda3安装好。
2. 服务器上运行pyspark, 统计单词次数
下面先使用服务器运行pyspark, 然后在里面运行自带的wordcount程序。 一开始,没有意识到python版本的问题, 所以就采用了最新的版本3.8多,这时候, 首先激活anaconda环境。
输入pyspark, 出现了第一个报错TypeError: namedtuple() missing 3 required keyword-only arguments: 'rename', 'defaults', and 'module'
:
这个的报错原因是pyspark和python的运行版本不匹配, python的版本太高了, 网上搜了一下发现spark1.4.多支持的python版本是3.6以下,所以就新建立了一个虚拟环境bigdata, 在里面用了python3.5.4的版本, 此时, 运行pyspark成功。
在这里面就可以直接运行下面代码了:
sc = SparkContext('local[2]', 'wordcount')
rdd = sc.textFile('file:///home/hduser/bigdata/1.txt').flatMap(lambda x: x.split()).map(lambda x: (x, 1)).reduceByKey(lambda a, b: a+b)sc.collect()
或者还可以, 在bigdata_env里面输入python,打开python解释器, 然后尝试运行命令:
from pyspark import SparkContext
这时候遇到了一个报错: "No module named "pyspark""
, 也就是在bigdata_env里面, python找不到pyspark包,确实, 我们的确没有在这里面安装pyspark呀, 那到底怎么在这个环境下运行pyspark程序呢? 现在的问题是我们的pyspark在spark里面, 在bigdata_env里面肯定是找不到这个包了, 所以我们就需要把pyspark放到环境变量里面, 让bigdata_env能够找到它。 也就是我们需要再配置一波环境变量, 下面是需要加的一行代码:
这样, 我们就能在bigdata_env环境下,进入python, 然后这样了哈哈。
这样,就能够在anaconda里面使用pyspark了。
3. 本地Pycharm上运行上面的pyspark代码,统计单词个数
虽然上面能够在anaconda里面使用pyspark包了, 但是这个是在服务器上,且需要命令行里面敲代码, 一旦代码量上去了,这样写起来非常不方便, 也没法提示和检查错误。 而Pycharm是一款特别适合开发python程序的IDE, 所以下面我想的是用本地的Pycharm去运行上面的那段程序, 这样以后开发的时候,就需要在本地的pycharm里面写程序就OK了,会非常方便。
顺带提一句就是如何使用免费的JetBrains公司的产品(pycharm,IntelJ等)? 如果是学生的话,可以使用学生邮箱进行注册登录, 就可以免费用了,不用花任何时间找什么激活的东西哈。如何注册, 来这里
下面就是实现上面的这个想法, 当然,废了半天劲,最后成功了, 这是最后的效果。
说一下这是个啥情况, 就是在我本地的Windows的Pycharm上, 写的pyspark程序, 然后直接点击运行, 就可以得到下面的结果。 pyspark环境是搭在了远程的服务器上。并且我本地的工程项目直接和服务器上的工程项目进行了关联, 只要在这里面写任何的python代码, 都会自动的同步到远程的文件上去。 这样,就省去了在服务器上使用pycharm或者在命令行里面敲程序了。
探索了半天,发现竟然还能这么玩, 神器,哈哈。 那是怎么做到的呢? 两步:
- pycharm需要用服务器上的python解释器,毕竟这里写的代码是pyspark代码, 而pyspark是搭建到了远程服务器上, 所以我们解释这些python代码的时候,也要用服务器上的python解释器。
- 配置好python解释器之后, 我们还需要告诉远程的python解释器,运行pyspark程序的时候,那些包要去哪里找到,毕竟远程的python解释器在anaconda里面, 而pyspark包都在spark里面,虽然上面在服务器上跑的时候,我们没有特别告诉,那是因为我们把pyspark配置到了环境变量里面, 如果python解释器在anaconda里面找不到,就去环境变量里面去找,然后就找到了。 但是这里不行, 毕竟我们是从Windows上运行的pyspark程序,得需要明确指定出pyspark在哪里。
这就是这里的逻辑了,下面具体看一下这两步。
3.1 pycharm里面用服务器上的解释器
打开pycharm, 新建立一个python 工程, 在这里面配置python解释器的时候,选下面这个:
指定了本地目录和服务区上对应目录之后,就可以实现本地文件和远程文件的同步操作, 只要在本地写了代码, 就会同步到远程上去。
这里的服务器上python解释器要注意一下, 一开始如果没有这个, 就点击右边的三点,出现
在这里面添加新的python解释器。一般,管理复杂的python环境, 会用到anaconda, 从这里面会建立不同的虚拟环境,然后安装不同的包去运行不同的python项目。所以在pycharm运行python程序,比较重要的一环就是为程序指定解释器,进行翻译。
这样就可以使用远程服务器的解释器了。 但这样还不可以运行pyspark程序, 会报错误说找不到pyspark里面的包, 首先,还是会报"No module named "pyspark""
,所以在前面需要指定一下spark的路径, spark里面的python路径, py4j这个。
import os
import sys # sys.path是python的搜索模块的路径集,是一个listos.environ['SPARK_HOME'] = '/usr/local/spark'
sys.path.append('/usr/local/spark/python')
sys.path.append('/home/hduser/anaconda3/envs/bigdata_env/bin/python3.5')
sys.path.append('/usr/local/spark/python/lib/py4j-0.8.2.1-src.zip')
这个地方当然不是固定的套路, 但是逻辑是一样的, 如果一开始包什么找不动包了, 模块了,大部分原因就是在这里, 有些东西我们需要指定一下子。否则程序不知道去哪找,比如如果没有最下面这个, 就会报找不到py4j这个包ImportError: No module named 'py4j'“
。我这里是报这些,如果报别的包,就需要手动找到那包在哪里,然后加入到这里, 比如有可能还会报找不到JAVA等, 就在加一个JAVA_HOME等,所以这里的逻辑就是python解释器找不到相应的包,我们得给他指定别的路径让它去找。
这时候, 再点击运行, 会发现运行的过程中还会报错:
java.io.IOException: Cannot run program "python": error=2, 系统找不到指定的文件
这个问题找的挺痛苦,因为网上很少有这么搞的, 所以给出的解决办法貌似都不可行。 后来找到了解决办法, 这原因是运行的时候, pyspark底层还是调用Java代码, 在调用Java的过程中, 还会在Java代码里也要运行python命令,通过python解释器去翻译代码(这个是我的理解哈), 这地方是具体运行Java代码的时候,它找不到python解释器了。 所以会在运行的地方报这个错, 这个我们从开头指定了也白搭, 不是一个东西的。 所以这个问题的解决方法是,我们需要配置环境变量 Run -> 编辑配置,出现下面的窗口:
这样就大功告成了, 但这里依然是这里的逻辑比较重要, 因为保错可能不一样, 但是底层的逻辑都差不多的。
一天的时间摸索环境, 还好,发现了一些新的东西哈哈, 又对pycharm熟悉了一步, 之前, 用pycharm用的是不多的, 写的工程代码比较少,大部分停留在了读的地步。 这次通过探索,发现pycharm确实适合写工程代码, 比较重要的就是对于一个项目的相关配置了,什么python解释器,环境变量啥的。
有了这些探索,可以干的事情很多,比如我想从本地的pycharm用远程服务器上的anaconda环境在远程服务器上写工程代码,可以直接搞。 就是上面的第一步。
如果想用远程服务器上的pyspark集群环境, 就上面的两步都弄好也可以写, 美滋滋了哈哈。 😉