小编kad*_*adu的帖子

Anaconda/MacOS:更改默认的python版本

当spyder坠毁时,我在osx 10.8上使用了带有anaconda的python.当我尝试重新启动它时,启动器显示它已卸载.我认为anaconda可能有问题,所以我重新启动了我的电脑,但问题仍然存在.

看着它,我注意到python的默认版本已被更改:

$ python --version
Python 3.4.1 :: Continuum Analytics, Inc.
Run Code Online (Sandbox Code Playgroud)

我尝试使用Apple更换它,重新defaults write链接python ln -sf,简单地设置一个alias python=python2.7,没有效果.

然后我尝试用conda删除python3,但conda remove python3不会这样做.搜索包产生了这个:

$ conda search python
Fetching package metadata: ..
(...)
python                       1.0.1                         0  defaults        
                             (...)
                          .  2.7.5                         2  defaults        
                          .  2.7.5                         3  defaults        
                             (...)
                          *  3.4.1                         0  defaults        
Run Code Online (Sandbox Code Playgroud)

我也查了一下Continuum文档,如果我想使用不同的版本,他们建议将2.7作为标准并使用Anaconda环境,这对我没有帮助.

有没有人知道如何将默认版本更改回2.7?

(规格为:anaconda 1.7.0,osx 10.8.5,conda 3.5.2)

python macos anaconda

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

Pyspark udf 对于不带参数的函数失败,但对于不带参数的 lambda 有效

withColumn我正在尝试使用不带参数的 udf将一列添加到我的 Spark DataFrame 中。这似乎只有在我使用 lambda 封装原始函数时才有效。

这是一个 MWE:

from pyspark.sql import Row, SparkSession
from pyspark.sql.functions import udf

spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame([Row(number=i) for i in range(10)])

def foo():
    return 'bar'

udfoo = udf(foo())
df = df.withColumn('word', udfoo())
# Fails with TypeError: _create_udf() missing 1 required positional argument: 'f'

udfoo = udf(lambda: foo())
df = df.withColumn('word', udfoo())
# Works
Run Code Online (Sandbox Code Playgroud)

我已经设法实现了我想要的行为,因此“解决方案”并不完全是我正在寻找的(尽管我欢迎任何关于更好/更惯用的方式来实现此类事情的建议)。如果有人来到这里寻找“如何做”的答案,那么另一个问题可能会有所帮助

我真正想要的是一个解释:为什么第一个解决方案会失败而第一个可行?

我在 Ubuntu 18.04.2 上使用 Spark 2.4.0 和 python 3.7.3

user-defined-functions apache-spark apache-spark-sql pyspark

2
推荐指数
1
解决办法
1733
查看次数