当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)
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