Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dataframe中的pyspark进程表达式_Python_Apache Spark_Pyspark_Eval_Pyspark Sql - Fatal编程技术网

Python dataframe中的pyspark进程表达式

Python dataframe中的pyspark进程表达式,python,apache-spark,pyspark,eval,pyspark-sql,Python,Apache Spark,Pyspark,Eval,Pyspark Sql,我有一个员工的工资,想知道工资下降了多少桶 salary=3000 规则表 rule_id,condtion,bucket 1,salary>1000,'A' 2,salary>2000,'B' 3,salary>3000,'C' 4,salary>4000,'D' 5,salary>5000,'E' 从以上两个表中,我想得出以下结果 rule_id,condtion,bucket,result 1,salary>1000,'A',True 2,salar

我有一个员工的工资,想知道工资下降了多少桶

salary=3000
规则表

rule_id,condtion,bucket
1,salary>1000,'A'
2,salary>2000,'B'
3,salary>3000,'C'
4,salary>4000,'D'
5,salary>5000,'E'
从以上两个表中,我想得出以下结果

rule_id,condtion,bucket,result
1,salary>1000,'A',True
2,salary>2000,'B'True
3,salary>3000,'C',True
4,salary>4000,'D',False
5,salary>5000,'E',False
我尝试了python和spark


工资=3000
rules_df=sqlContext.read.format('com.databricks.spark.csv')。选项(header='true',inferschema='true')。加载('rule.csv'))
validate=规则和列('result',eval(规则和条件))
对于上面的代码,我得到下面的错误

Traceback (most recent call last):

  File "C:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3296, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-129-a813eeada424>", line 1, in <module>
    rules_df.withColumn('valid',eval(str(rules_df.condtion)))

  File "<string>", line 1
    Column<b'condtion'>
                      ^
SyntaxError: unexpected EOF while parsing
回溯(最近一次呼叫最后一次):
文件“C:\Anaconda3\lib\site packages\IPython\core\interactiveshell.py”,第3296行,运行代码
exec(代码对象、self.user\u全局、self.user\n)
文件“”,第1行,在
规则与列('valid',eval(str(规则与条件)))
文件“”,第1行
纵队
^
SyntaxError:分析时出现意外的EOF

您需要使用
udf
来执行
eval
这里: 下面是数据帧:

+-------+-----------+------+
|rule_id|   condtion|bucket|
+-------+-----------+------+
|      1|salary>1000|   'A'|
|      2|salary>2000|   'B'|
|      3|salary>3000|   'C'|
|      4|salary>4000|   'D'|
|      5|salary>5000|   'E'|
+-------+-----------+------+
现在我们定义一个
udf
来显式解析列
condition

salary = 3000
my_udf = F.udf(lambda c: eval(c, {'salary':salary}), BooleanType())
df = df.withColumn('result', my_udf('condtion'))
df.show()

+-------+-----------+------+------+
|rule_id|   condtion|bucket|result|
+-------+-----------+------+------+
|      1|salary>1000|   'A'|  true|
|      2|salary>2000|   'B'|  true|
|      3|salary>3000|   'C'| false|
|      4|salary>4000|   'D'| false|
|      5|salary>5000|   'E'| false|
+-------+-----------+------+------+

我不确定你的
规则
表有多大,但如果不是太大
如果您只是尝试将规则表应用于单个数据点,
这可能不是实现这一目标的最有效方式。
只使用常规的
python
pandas
函数更容易

在大多数情况下,它更有可能将规则应用于很多很多数据