我试着运行一个简单的pyspark示例,我自己为学习目的编写了这个示例:
from pyspark import SQLContext
from pyspark import SparkContext
from pyspark.sql.types import StringType
from pyspark.sql.functions import udf
from urllib.parse import urlsplit
def extractPath(host, url):
if host in url:
return urlsplit(url).path
else:
return '-'
sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)
# preconstruct custom spark functions, used in method processFile
getPathUdf = udf(extractPath, StringType())
df = sqlContext.read.csv(
path="resources/smalldatafile.csv",
header=True,
inferSchema=True
)
previousPagePathField = 'previous page path'
hostnameField = 'host name'
dataCsRefererField = 'data_cs_referer'
# do mappings
dfMapped = (
df
.withColumnRenamed('data_cs_host', hostnameField)
)
# split referrer url
print(previousPagePathField)
print(hostnameField)
print(dataCsRefererField)
print(getPathUdf(hostnameField, dataCsRefererField))
dfRefUrl = dfMapped.withColumn(previousPagePathField, getPathUdf(hostnameField, dataCsRefererField))
dfRefUrl.show(1)
最后一行用跟踪使我的程序崩溃:
^{pr2}$将show(1)
更改为show()
会导致相同的崩溃。我在python3.6上使用pyspark 2.4.0。我的javahome设置为/usr/lib/jvm/java-8-openjdk-amd64
。此外,在终端中运行程序不会导致崩溃。所以我认为这与某种PyCharm配置有关,这就是我所使用的IDE。在
TLDR;PyCharm存在指向正确JDK的问题
我今天也有同样的问题。我只是通过将PyCharm中的runtime configs中的
JAVA_HOME
变量设置为Java8SE安装的主目录来解决这个问题。在我的例子中,JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/home
这是指您实际的环境变量
JAVA_HOME
(即,当您向终端键入echo $JAVA_HOME
时得到的结果)还是在PyCharm上的运行时配置中设置的环境变量?因为PyCharm只知道后者,因为JAVA_HOME
不是系统范围的变量。在相关问题 更多 >
编程相关推荐