我在 Python 中缺少从长到宽的自发和轻松转换,反之亦然。想象一下,我有一个大而整洁的数据框,其中包含许多属性列和一个包含所有实际值的列,例如
PropA ... PropZ Value
green Saturn 400
green Venus 3
red Venus 2
.
.
Run Code Online (Sandbox Code Playgroud)
数据本身通过保持整洁而得到很好的处理。但有时我必须对某些属性执行一些操作(例如,比较蜜蜂红色和绿色蜜蜂(对于与其他属性相似的所有项目)可能很有趣)。因此,直接的方法是尽可能保持整洁,只弄乱我感兴趣的某些属性(PropA)。随后,我可以使用我想要的任何函数执行逐行映射,并且我可以创建一个包含函数输出的附加 PropA-Entry。
然而,在 Python 中保持所有其他属性的整洁并不像我习惯使用 R 时那么容易。原因是,所有非关键属性都通过我找到的所有 pd 方法提交给索引。如果我想保留更多的专栏,那就一团糟。
那么你如何处理这个问题。有没有其他巧妙的方法来处理这些类型的问题?
我自己写了一个传播方法,但它非常慢。也许,你对我如何改进有一些想法。
#the idea is to group by the remaining properties, which should be left in the long format.
#then i spread the small tidy data table for any group
@staticmethod
def spread(df, propcol, valcol):
def flip(data,pc,vc):
data = data.reset_index(drop=True)
return {data[pc][i]:[data[vc][i]] for i in range(0,len(data))}
#index columns are all which are not …Run Code Online (Sandbox Code Playgroud) 我有一个 spark-job,我通常从本地机器提交到 hadoop 集群。当我用 spark 2.2.0提交它时它工作正常,但当我用版本2.4.0提交它时无法启动。只是SPARK_HOME有所不同。
drwxr-xr-x 18 me 576 Jan 23 14:15 spark-2.4.0-bin-hadoop2.6
drwxr-xr-x 17 me 544 Jan 23 14:15 spark-2.2.0-bin-hadoop2.6
Run Code Online (Sandbox Code Playgroud)
我提交的工作就像
spark-submit \
--master yarn \
--num-executors 20 \
--deploy-mode cluster \
--executor-memory 8g \
--driver-memory 8g \
--class package.MyMain uberjar.jar \
--param1 ${BLA} \
--param2 ${BLALA}
Run Code Online (Sandbox Code Playgroud)
为什么新的spark版本拒绝带我的uberjar?我在 spark 2.4 文档中没有发现任何变化。顺便说一句:jar 是用 spark 2.1 作为依赖项构建的。有任何想法吗?
编辑:
我想我的问题是不是与火花未能找到我uberjar事情。更确切地说,我可能对新的内置 avro 功能有问题。和以前一样,我通过使用隐函数读取Avro的文件spark.read.avro从com.databricks.spark.avro._。Spark 2.4.0 有一些新的内置 avro 东西(其中大部分可以在 中找到org.apache.spark:spark-avro_2.*11*:2.4.0)。失败可能与此有关。
java.lang.ClassNotFoundException: …Run Code Online (Sandbox Code Playgroud) apache-spark ×1
pandas ×1
pivot ×1
python ×1
spark-avro ×1
spark-submit ×1
spread ×1
uberjar ×1